我使用 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
我还尝试了以下方法:
将公式放在“private String specField”上方 - 应用已启动,但 hibernate 失败,无法在数据库中找到 spec_field
将 @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/