java - 为 Hibernate 实体的特定字段设置查询

标签 java mysql spring hibernate

我使用 spring 和 hibernate。出现了下面的情况,不知道是不是真的可以实现。将不胜感激。

比如有一个hibernate实体

    @Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    public String getSpecField() {
        return (field1 != null ? field1 : field2);
    }
}

我需要 specField 的值由 SQL 查询生成,而不是由 Java 代码生成。 像这样

    @Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    @Query(value= "COALESCE(field1, field2)")
    public String getSpecField() {
        return specField;
    }
}

有人告诉我应该有能力这样做。但没有找到任何批准这一点的东西。

查询到底做了什么实际上并不重要。我需要 specField 将被某些查询而不是 java 代码采用。可能吗?

感谢您的帮助。

更新感谢@premkumar,建议使用@Formula 所以现在我有

@Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    @Formula("COALESCE(field2, field2)")
    public String getSpecField() {
        return (field1 != null ? field1 : field2);
    }
}

但是应用程序无法启动 bean 初始化 org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory 出现 NullPointerException

我还尝试了以下方法:

  1. 将公式放在“private String specField”上方 - 应用已启动,但 hibernate 失败,无法在数据库中找到 spec_field

  2. 将 @Formula 和 @Transient 放在 getter 上 - 应用已启动,没有错误,但 specField 始终为空。看起来 hibernate 完全忽略了它

最佳答案

如果您正在使用 hibernate ,请尝试以下操作:

@Formula("COALESCE(field1, field2)")
public String getSpecField() {
    return specField;
}

注意:- 据我所知,在 JPA 中没有其他选择。当心这会混淆 hibernate 和 jpa 注释。

关于java - 为 Hibernate 实体的特定字段设置查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34163265/

相关文章:

java - 特殊字符的随机数生成器

java - 如何将此代码优化为更少的代码行

java - CNAME 和 cookie

mysql - 从多个表中的电话号码获取姓名?

mysql - 如何根据数据计数按月和年进行分组

java - Spring JPA : Insert succesfully but Update Failed (javax. persistence.PersistenceException:托管刷新期间出错)

java - LDAP 搜索两个组

mysql - 如何使用案例条件在一行中获取数据

java - 将 mongodb spring 请求概括为一个列表,避免循环 for

javascript - Spring MVC + AngularJS + JWT token 过期 - 方法