hibernate @formula只选择字段

时间:2016-08-24 03:45:51

标签: hibernate

我正在关注hibernate的教程,并在实体上有一个应该只选择的字段。但是,在保存实体时,该字段位于插入查询中并最终出错。请协助。

@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")

下面是错误堆栈,在插入查询中使用字段'age'。它应该是一个仅选择字段。

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'

1 个答案:

答案 0 :(得分:1)

您已使用@Access(value=AccessType.PROPERTY)注释了您的实体,这基本上意味着hibernate使用getter来确定将映射到db中的列的属性名称。你有一个getAge()。删除此批注,以便仅将带有@Column注释的字段与db中的相应列相关联。