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