java - Hibernate @Formula 导致 org.hibernate.HibernateException : Missing column

标签 java hibernate postgresql calculated-columns

我有以下带有计算字段 isIdle 的实体:

@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;
    }
}

如果 last_user_login_time 包含最近 5 天的 UNIX 时间戳,该字段应为 0,否则为 1。

据计算,我的数据库表中没有对应的列。 当我部署我的应用程序时,出现以下错误:

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

为什么 Hibernate 会尝试为这个计算字段找到一个列? 数据库使用PostgreSQL。

最佳答案

我通过将 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;

关于java - Hibernate @Formula 导致 org.hibernate.HibernateException : Missing column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461382/

相关文章:

java - Hibernate:如何编写 HQL 来获取没有其标识关系记录的实体的记录

postgresql - 如果我的 VPN 打开,我的 Phoenix 项目突然无法连接到 postgres — 如何修复?

ruby-on-rails - HTML 编码 UTF-8 字符串被破坏为 latin1

java - 如何成功添加fragment?

java - 如何从java代码执行批量存储过程调用?

java - 为什么我无法让 Google Cloud Debugger 运行?

java - 按国家/地区城市州/地区搜索用户

java - Hibernate 查询没有检索结果?

postgresql - 如何在postgresql中找到特定字段中数据的最大长度?

java - 搜索由音频识别生成的数组列表