1 關於hibernate的@Formula用法和作用可以參照別的文章2 hibernate提取屬性也叫做計算屬性,該屬性值是一個值讀屬性,是通過使用sql語句獲取得到的,常用的是統計數據
3 案例:我有一個employee實體類,該類有主鍵Id或name,月薪水(monthlySalary)等屬性(字段),你現在有一個想法想要獲取該employee的年薪,計算方式是月薪*12個月=年薪。
4 上面這個是沒有加入hibernate @@Formula支持的用法,現在我們加入這個註解實現:package net.ozar.exp.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="EMPLOYEE") public class Employee implements java.io.Serializable { private static final long serialVersionUID = -7311873726885796936L; @Id @Column(name="ID") private Integer id; @Column(name="FIRST_NAME", length=31) private String firstName; @Column(name="LAST_NAME", length=31) private String lastName; @Column(name="MONTHLY_SALARY") private float monthlySalary; public Employee() { } // getters and setters // ... public float getMonthlySalary() { return monthlySalary; } public void setMonthlySalary(float monthlySalary) { this.monthlySalary = monthlySalary; } /* This artificial property - as I call it - is a kind of a calculated property, but not with Hibernate derived property support - not just yet */ public float getYearlySalary() { return this.monthlySalary * 12; } }
5 注意到上面這個案例的@Formla的值是關聯到“MONTHLY_SALARY”而yearlySalry屬性是沒有存儲如數據庫的。package net.ozar.exp.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.Formula; @Entity @Table(name="EMPLOYEE") public class Employee implements java.io.Serializable { private static final long serialVersionUID = -7311873726885796936L; @Id @Column(name="ID") private Integer id; @Column(name="FIRST_NAME", length=31) private String firstName; @Column(name="LAST_NAME", length=31) private String lastName; @Column(name="MONTHLY_SALARY") private float monthlySalary; @Formula("MONTHLY_SALARY*12") private float yearlySalary; public Employee() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public float getMonthlySalary() { return monthlySalary; } public void setMonthlySalary(float monthlySalary) { this.monthlySalary = monthlySalary; } public float getYearlySalary() { return yearlySalary; } }
6 一些更爲複雜用法
注意:最後面的customer_id=id中後面的id的值也就當前對象的id值@Formula("(select min(l.creation_date) from Logs l where l.customer_id = id)") private Date firstLoginDate;
使用hibernate 提取屬性 hibernate 註解@Formula
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.