[英]how to call MySQL stored procedure in spring boot using hibernate?
[英]How to map the results of a stored procedure to an entity in spring-boot/hibernate
我有一個實體 class 如下所示
注意:checkNumber 是唯一的。
package tz.go.ega.biometic.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.ToString;
import org.hibernate.annotations.NaturalId;
import org.hibernate.validator.constraints.SafeHtml;
import org.springframework.data.annotation.Transient;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "employee", uniqueConstraints = {
@UniqueConstraint(columnNames = {"check_number"})
})
@Data
@AllArgsConstructor
@ToString
@NoArgsConstructor
public class Employee implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = true)
//@NotEmpty(message = "Please enter first name")
@Column(name = "first_name")
private String firstName;
@Basic(optional = true)
//@NotEmpty(message = "Please enter middle name")
@Column(name = "middle_name")
private String middleName;
@Basic(optional = true)
//@NotEmpty(message = "Please enter last name")
@Column(name = "last_name")
private String lastName;
private String status;
@Basic(optional = true)
// @Pattern(regexp ="^[a-zA-Z0-9_]*$",message = "{field.validation.voteCode}")
// @SafeHtml(message = "{field.validation.voteCode}")
@Column(name = "vote_code", length = 50)
private String voteCode;
@NaturalId
@Basic(optional = true)
//@NotNull(message = "Please enter check number")
@Column(name = "check_number")
private long checkNumber;
private Boolean isActive = true;
@Basic(optional = false)
@Column(name = "created_at", updatable = false)
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private LocalDateTime createdAt = LocalDateTime.now();
@Column(name = "updated_at")
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private LocalDateTime updatedAt = LocalDateTime.now();
@Column(name = "email")
private String email;
}
然后我有一個存儲過程來計算每個員工的工作時間,然后返回結果,如下所示。
+--------------+-------+
| checkNumber | Time |
+--------------+-------+
| 1122334455 | 29893 |
| 1234567890 | 15427 |
| 2233445566 | 19745 |
| 6655443322 | 12578 |
+--------------+-------+
我想要實現的是,map 將存儲過程的結果(如上所示)存儲到一個實體(我們稱之為 EmployeeWorkHours ),然后使用 checkNumber 在該實體和 Employee 實體之間創建關系。
我希望 EmployeeWorkHours object 能夠像在正常的 hibernate 關系中一樣直接引用它的員工。
我怎么能 go 關於這個,任何幫助將不勝感激。 謝謝你。
在您的 EmployeeWorkHours 實體上,您需要與 Employee 實體建立 OneToOne 關系
@OneToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "checkNumber", unique = true, nullable = false)
private Employee employee;
在您的存儲庫中,您可以編寫一個 sql 查詢,如下所示:
@Query(value = "{CALL yourStoredProcedure (:var1, :var2, ..., :varn)}", nativeQuery = true)
int getWorkHours(@Param("var1") String var1, @Param("var2") String var2,...,
@Param("varn") String varn);
然后在您的服務層中,您只需調用此方法做您想做的其他事情並將其持久化。 希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.