2015-12-25 2 views
2

У меня есть следующий объект с расчетной областью isIdle:результатов Hibernate @Formula в org.hibernate.HibernateException: Отсутствует колонок

@Entity 
@Table(name = Customer.TABLE) 
public class Customer { 

    // ... 

    @JsonIgnore 
    private static final String IS_IDLE_SQL = 
     "CASE WHEN (trunc(extract(epoch from now())) - coalesce(last_user_login_time,0) " + 
     "> 5 * 24 * 3600) THEN 1 ELSE 0 END"; 

    @Formula(IS_IDLE_SQL) 
    private Integer isIdle; 

    public Integer getIsIdle() { 
     return isIdle; 
    } 

    public void setIsIdle(Integer isIdle) { 
     this.isIdle = isIdle; 
    } 
} 

Поле должно быть 0, если last_user_login_time содержит UNIX временной метку, которая в последнее 5 дней и 1 в противном случае.

Как подсчитано, у меня нет соответствующей колонки в моей таблице БД. Когда я раскрываю мое приложение, я получаю следующее сообщение об ошибке:

org.hibernate.HibernateException: Missing column: isIdle in public.customer 
    at org.hibernate.mapping.Table.validateColumns(Table.java:366) 

Почему Hibernate попытаться найти столбец для этого вычисляемого поля? База данных использует PostgreSQL.

ответ

0

Я решить мою проблему, поставив SQL заявление прямо в @Formula аннотацию, как это:

@Formula("CASE WHEN (trunc(extract(epoch from now())) - coalesce(last_user_login_time,0) " + 
    "> 5 * 24 * 3600) THEN 1 ELSE 0 END") 
private Integer isIdle;