2016-08-24 2 views
0

私はhibernateのチュートリアルに従っており、選択する必要があるエンティティ上にフィールドを持っています。しかし、エンティティを保存すると、ファイルは挿入クエリ内にあり、エラー時に終了します。手伝ってください。hibernate @formula onlyフィールドを選択

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

、同様に以下を試してみましたが、エラー・スタックで、フィールドの年齢は、「INSERTクエリで使用されています。それは選択のみのフィールドでなければなりません。

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

あなたは基本的に休止状態は、DB内の列にマッピングされるプロパティ名を決定するためにゲッターを使用することを意味し@Access(value=AccessType.PROPERTY)であなたのエンティティを注釈を付けています。あなたはgetAge()です。 @Columnで注釈が付けられたフィールドのみをdbの該当する列に関連付けるには、この注釈を削除します。

+0

ありがとうございました。出来た。したがって、プロパティの注釈は数式フィールドを操作することはありません。それ以外の方法がありますか? – Sekar

+0

getterに '@ Column'を置くことで、プロパティアクセス型を使用できます。クラスから '@Access'を取り除くことにより、フィールドに(AccessType.FIELDの場合)、またはゲッター(AccessType.PROPERTYの場合)に' @ Column'を置くことで、エンティティのアクセスタイプを組み合わせることができます。 – veljkost

関連する問題