2012-03-13 9 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

これはフィールド上でのアノテーションの使用とどのように相互作用するのか分かりませんが、getterに注釈を付けると、@Transientアノテーションを使用してこれをHibernateに伝えることができます永続することはありません。

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

ありがとうございました! – SecStone

+0

javaフラグを使用することもできます public transient String xyz; – AndresQ

関連する問題