2014-12-01 5 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 будут использовать метод prePersist в B, выполненный до метода prePersist в A или наоборот?

Можно ли предположить, что prePersist в B будет выполнен до того, как класс 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

+0

@ Andy, что имеет смысл, спасибо – cevantes