2012-09-06 40 views
1
充滿

我已經和@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_NAMELAST_NAME領域不同的記錄。我使用Hibernate 3.3和PostgreSQL 8.4.9。我究竟做錯了什麼?

+0

您的意思是說,查詢返回的'loFstLastName'的每個值都是null?如果是這樣,你如何運行查詢?通過JPA的EntityManager?通過休眠會話?顯示你的代碼。另外,雖然它不能解釋所有*值爲空,但請注意,'something'NULL是NULL。你必須使用'coalesce(FIRST_NAME,'')|| ''||如果「FIRST_NAME」和/或「LAST_NAME」可能爲空,合併(LAST_NAME,'')'。 –

+0

查詢正在通過JPA的EntityManager運行。其結果中的每個值都爲空。正如你所建議的,我嘗試過使用'coalesce'。它沒有幫助。 – vect

+0

除非@ axtavt的答案(這是一個好點)可以解決問題,請更新問題以顯示您爲問題查詢運行的實際代碼。 –

回答

2

您不應該在同一實體內混合不同的訪問類型(即在屬性和字段上放置註釋)(除非您明確地使用@Access配置它)。請嘗試以下操作:

@Formula("FIRST_NAME || ' ' || LAST_NAME") 
public String getLoFstLstName() { 
    return this.loFstLstName; 
} 
+0

我試過了。它會導致以下部署異常:'java.lang.ClassCastException:org.hibernate.mapping.Formula無法轉換爲org.hibernate.mapping.Column' – vect

+0

@vect:您能否顯示完整的堆棧跟蹤? – axtavt

+0

[Here](http://paste.org.ru/?jcp9x2) – vect