2014-12-01 87 views
4

假設它使用@PrePersist和@PreUpdate註釋和組合型的繼承下面的代碼片段時:JPA @PrePersist和@PreUpdate爲了使用繼承

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class A { 
    ... 

    @PrePersist 
    private void prePersist() { 
     ... 
    } 

    @PreUpdate 
    private void preUpdate() { 
     ... 
    } 
} 

@Entity 
@DiscriminatorValue("B") 
public class B extends A { 
    ... 

    @PrePersist 
    private void prePersist() { 
     ... 
    } 

    @PreUpdate 
    private void preUpdate() { 
     ... 
    } 
} 

問:我們可以依靠的任何命令執行回調方法?

例如,如果持久化類A和B將在B中的prePersist方法在A中的prePersist方法之前執行,或者反之亦然?

我們可以假設B類中的prePersist會在A類持續之前被執行嗎?

回答

5

是的。首先將執行超類回調。

當事件觸發時,聽衆都在執行順序如下:

@EntityListeners for a given entity or superclass in the array order 

Entity listeners for the superclasses (highest first) 

Entity Listeners for the entity 

Callbacks of the superclasses (highest first) 

Callbacks of the entity 

詳情細節讀到:「回調和聽衆繼承」在

https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/listeners.html

+0

不要把鏈接因爲它是相同的一些重要部分 – tharif 2015-04-07 12:24:08

+0

@安迪有道理,謝謝 – cevantes 2015-04-08 10:04:16