Java 计算属性为';冬眠
我在我的一个实体上创建了一个带有Java 计算属性为';冬眠,java,hibernate,postgresql,Java,Hibernate,Postgresql,我在我的一个实体上创建了一个带有@Formula注释的计算属性: @Entity @Table(name="PERSON") public class Person { @Searchable(name = "First name") private String firstName; @Column(name = "FIRST_NAME", nullable=false) public String getFirstName() { retu
@Formula
注释的计算属性:
@Entity
@Table(name="PERSON")
public class Person {
@Searchable(name = "First name")
private String firstName;
@Column(name = "FIRST_NAME", nullable=false)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Searchable(name = "Last name")
private String lastName;
@Column(name = "LAST_NAME", nullable=false)
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Formula("FIRST_NAME || ' ' || LAST_NAME")
private String loFstLstName;
public String getLoFstLstName() {
return this.loFstLstName;
}
public void setLoFstLstName(String loFstLstName) {
this.loFstLstName = loFstLstName;
}
}
问题是我在以下代码的persons
列表中只有空值:
Query q = entityManager.createQuery("SELECT loFstLstName FROM Person");
List persons = q.getResultList();
PERSON
表包含FIRST\u NAME
和LAST\u NAME
字段中值不同于null的记录。我正在使用Hibernate 3.3和PostgreSQL 8.4.9。我做错了什么?您不应该在同一实体内混合使用不同的访问类型(即在属性和字段上放置注释)(除非您使用@access
明确配置它)。请尝试以下操作:
@Formula("FIRST_NAME || ' ' || LAST_NAME")
public String getLoFstLstName() {
return this.loFstLstName;
}
您的意思是查询返回的
loFstLastName
的每个值都是空的吗?如果是,您如何运行查询?通过JPA的实体管理器?通过休眠会话?显示您的代码。另外,虽然它不能解释所有的值都为null,但请注意,'something'| null
是null
;如果FIRST_NAME
和/或LAST_NAME
可能为空,则必须使用coalesce(FIRST_NAME.)、、)|124;“、”coalesce(LAST_NAME.)
。其结果中的每个值都为null。我试着按照你的建议使用合并。这没有帮助。除非@axtavt的答案(这是一个很好的观点)解决了问题,否则请更新问题以显示您为问题查询运行的实际代码。我尝试了这个。它在部署时导致以下异常:java.lang.ClassCastException:org.hibernate.mapping.Formula无法强制转换为org.hibernate.mapping.Column