2016-08-24 55 views
0

我正在關注hibernate上的一個教程,並且在實體上只有一個字段應該選擇。然而,在保存實體時,該字段在插入查詢中並最終出錯。請協助。hibernate @formula只選擇字段

@Entity 
@Table(name="finances_user") 
@Access(value=AccessType.PROPERTY) 
public class User { 

    ... 
    private Date birthDate; 

    @Formula("lower(datediff(curdate(), birth_date)/365)") 
    private int age; 

    @Column("BIRTH_DATE") 
    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 
    ... 
} 

我曾嘗試以下爲好,

@Formula(value = "select lower(datediff(curdate(), birth_date)/365) from finances_user l where l.USER_ID = userId") 

下面是錯誤堆棧,該領域「時代」在插入查詢使用。它應該是一個只選擇的字段。

DEBUG - insert into finances_user (age, BIRTH_DATE, CREATED_BY, CREATED_DATE, EMAIL_ADDRESS, FIRST_NAME, LAST_NAME, LAST_UPDATED_BY, LAST_UPDATED_DATE, USER_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
DEBUG - could not execute statement [n/a] 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'age' in 'field list' 

回答

0

你註釋您的實體@Access(value=AccessType.PROPERTY)這基本上意味着Hibernate使用的干將確定將被映射到數據庫列的屬性名稱。你有一個getAge()。刪除此批註以便僅將註釋爲@Column的字段與db中的相應列關聯。

+0

謝謝。有效。所以屬性註釋將不會使用公式字段。或者有沒有其他的方法可以做到這一點 – Sekar

+0

你可以通過在獲取者上放置@ @ Column來使用屬性訪問類型。通過從類中去除@ @ Access,你可以通過在一個字段(對於AccessType.FIELD)或一個獲得者(對於AccessType.PROPERTY)中加入'@ Column'來在實體中組合訪問類型。 – veljkost