2013-05-18 34 views
0

我可以在父類和子類中定義如下的JPA回調方法嗎?如果是,我是否需要調用super.onPrePersist();在子類中的onPrePersist()方法?@MappedSuperclass和子類中的相同JPA回調方法

@MappedSuperclass 
public abstract class AbstractEntity { 

    @PrePersist 
    protected onPrePersist() { 
     System.out.println("Parent onPrePersist() invoked"); 
    } 
} 

@Entity 
@Table(name = "child") 
public class Child extends AbstractEntity { 

    @PrePersist 
    protected onPrePersist() { 
     **super.onPrePersist();** 
     System.out.println("Child onPrePersist() invoked"); 
    } 
} 
+1

當你測試它,會發生什麼? JPA實體是Java對象,並遵守相同的規則。如果你重寫一個方法,重寫的方法將被調用。 –

回答

2

我已經爲上述場景編寫了一個單元測試,它工作。對於每一個在子類中的回調方法,你必須調用父回調方法第一:

@Override 
@PrePersist 
protected onPrePersist() { 
    **super.onPrePersist();** 
    System.out.println("Child onPrePersist() invoked"); 
} 
+1

+1用於測試和試驗,而不是詢問。 –

0

您不必自行調用父回調方法,只是不覆蓋@PrePersist帶註釋的方法,因爲它隱藏父方法並阻止其執行。如果您的回調方法具有不同的名稱,則會根據它們在層次結構中的位置順序調用它們,大多數常規類首先調用。

@MappedSuperclass 
public abstract class AbstractEntity { 

    @PrePersist 
    protected onPrePersistParent() { 
     System.out.println("Parent onPrePersist() invoked"); 
    } 
} 

@Entity 
@Table(name = "child") 
public class Child extends AbstractEntity { 

    @PrePersist 
    protected onPrePersistChild() { 
     System.out.println("Child onPrePersist() invoked"); 
    } 
} 

這將產生輸出:

  1. 家長onPrePersist()調用
  2. 兒童onPrePersist()調用
相關問題