2011-10-29 4 views
5

フォーク!@EntityListenerは@MappedSuperclassでも動作しますか?

エンティティクラスを定義し、@MappedSuperclass@EntityListenerと注釈を付けると、リスナーは子クラス内のライフサイクルイベントも呼び出されますか?

例:

@MappedSuperclass 
@EntityListeners(class=LastUpdateListener.class) 
public abstract class Animal { 
    @Id private Integer id; 
    private String name; 
    private Calendar dateOfBirth; 
    @Transient private int age; 
    private Date lastUpdate; 
    //getters and setters 

    /** 
    * Set my transient property at load time based on a calculation, 
    * note that a native Hibernate formula mapping is better for this purpose. 
    */ 
    @PostLoad 
    public void calculateAge() { 
     Calendar birth = new GregorianCalendar(); 
     birth.setTime(dateOfBirth); 
     Calendar now = new GregorianCalendar(); 
     now.setTime(new Date()); 
     int adjust = 0; 
     if (now.get(Calendar.DAY_OF_YEAR) - birth.get(Calendar.DAY_OF_YEAR) < 0) { 
      adjust = -1; 
     } 
     age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR) + adjust; 
    } 
} 

public class LastUpdateListener { 
    /** 
    * automatic property set before any database persistence 
    */ 
    @PreUpdate 
    @PrePersist 
    public void setLastUpdate(Cat o) { 
     o.setLastUpdate(new Date()); 
    } 
} 

感謝。

答えて

3

はい、マップされたスーパークラスの@PostLoadで注釈が付けられ、LastUpdateListenerのエンティティリスナーメソッドが呼び出されます。

マップされたスーパークラス自体のライフサイクルイベントは存在しません。通常通り、サブクラスに適用されます。

+1

[1]この時点では、これがこのによる日食TopLinkのは不可能であると言わなければならない[バグ] [1] :https://bugs.eclipse.org/bugs/show_bug.cgi?id=302194 "バグ" – rekiem87

関連する問題