为Hibernate实体的特定字段设置查询 [英] Setting up query for specific field of Hibernate entity
问题描述
我使用spring和hibernate。出现以下情况,我不知道是否真的有可能实施。例如,有一个hibernate实体
@Entity
public class TestEntity {
private String field1;
私人字符串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);
$ b $ p
$ b 我需要specField的值由SQL查询而不是java代码。
类似于此
@Entity
public class TestEntity {
private String field1;
私人字符串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;
私人字符串field2;
private String specField;
@Column(name =field1)
public String getField1(){
return field1;
@Column(name =field2)
public String getField2(){
return field2;
$ b @Formula(COALESCE(field2,field2))
public String getSpecField(){
return(field1!= null?field1:field2) ;
$ 但是应用程序无法从使用$ b初始化bean初始化$ b NullPointerException在org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory
我也试过以下内容:
-
将公式放在private String specField上面 - 应用程序已启动,但hibernate失败,无法在数据库中找到spec_field
-
将@Formula和@Transient放在getter - app开始,没有错误,但specField始终为空。它看起来像hibernate完全忽略了它。
如果你使用hibernate,请尝试以下操作:
$ pre $ lt; code> @Formula(COALESCE(field1,field2))
public String getSpecField(){
返回specField;
}
注意: - 据我所知,在JPA中没有其他选择。注意这会混淆hibernate和jpa注释。
I use spring and hibernate. The following situation occured and I don't know if it's really possible to implement. Will appreciate any help.
For example, there is a hibernate entity
@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);
}
}
And I need the value for specField to be generated by SQL query and not by java code.
Something like this
@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;
}
}
I was told that there should be ability to do so. But didn't find anything that approves this.
it's not actually important what exactly query does. I need that specField will be taken by some query and not by java code. Is it possible?
Thanks for help.
UPDATE Thanks to @premkumar, for advicing to use @Formula
So now I have
@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);
}
}
But app fails to start on bean initialization with
NullPointerException at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory
I tried also the following:
Put formula above "private String specField" - app started, but hibernate failed on could not find spec_field in database
Put @Formula and @Transient on getter - app started, no errors, but specField is always null. It looks like hibernate totally ignored it
解决方案 If you are using hibernate, try the following:
@Formula("COALESCE(field1, field2)")
public String getSpecField() {
return specField;
}
Note:- As far as I know there is no alternative in JPA. Beware this will mixup hibernate and jpa annotations.
这篇关于为Hibernate实体的特定字段设置查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!