2016-08-24 5 views
0

최대 절전 모드에 대한 지침서를 따르고 선택해야하는 엔티티 필드가 있습니다. 그러나 엔티티 저장시 엔트리는 삽입 쿼리에 있으며 오류가 발생하면 종료됩니다. 도와주세요.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

당신은 기본적으로 최대 절전 모드가 DB에있는 컬럼에 매핑 될 속성 이름을 결정하기 위해 게터를 사용한다는 것을 의미 @Access(value=AccessType.PROPERTY)으로 법인을 주석했다. 그리고 getAge()이 있습니다. @Column으로 주석 된 필드 만 db의 해당 열과 관련 시키려면이 주석을 제거하십시오.

+0

감사합니다. 그것은 효과가 있었다. 따라서 속성 주석은 수식 필드를 사용하지 않습니다. 아니면 다른 방법이 있나요? – Sekar

+0

Getter에'@ Column'을 넣어 속성 액세스 유형을 사용할 수 있습니다. 클래스에서'@Access'를 제거함으로써 필드에 (AccessType.FIELD에 대해) 또는 getter (AccessType.PROPERTY에)'@ Column'을 넣어 엔티티에서 액세스 유형을 결합 할 수 있습니다. – veljkost