2012-03-13 80 views
0

我想向Seam實體添加一些其他方法。這些方法在數據庫中沒有自己的列。他們只是格式化和組合一些列。Seam實體中的其他方法

@Entity 
@Table(name = "event", schema = "public") 
public class Event implements java.io.Serializable { 

    // [...] 

    @Column(name = "status", nullable = false, length = 13) 
    @NotNull 
    @Length(max = 13) 
    private String status; 

    public String getStatus() { 
     return this.status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getSpecialStatus() { // not allowed as there is no setter and no column 'specialStatus' 
     return someValue; 
    } 

    // [...] 
} 

此代碼引發以下異常:

javax.persistence.PersistenceException: org.hibernate.PropertyNotFoundException: Could not find a setter for property specialStatus in class foobar.entity.Event 

我嘗試添加以下二傳手:

private void setSpecialStatus(String status){ 
    throw new NotImplementedException(); 
} 

的異常變化:

javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing column: specialStatus in public.event 

有誰知道是否有辦法o解決這個問題?或者向實體添加其他方法是不好的做法? (如果是這樣,我應該如何實現它?)

回答

1

我不知道這將如何與您在字段上使用批註進行交互,但如果您註釋您的getters,您可以使用@Transient註釋來告訴Hibernate這不被堅持。

@Transient 
public String getSpecialStatus() { 
    return someValue; 
} 
+0

謝謝您的快速響應! – SecStone 2012-03-13 10:23:25

+0

您還可以使用Java標誌 公衆的過渡性字符串XYZ; – AndresQ 2012-03-13 13:42:13