6

假设以下代码片段使用 @PrePersist 和 @PreUpdate 注释以及 Joined-type 继承:

@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 类被持久化之前执行吗?

4

1 回答 1

6

是的。首先将执行超类回调。

引发事件时,侦听器按以下顺序执行:

@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

于 2015-04-07T12:20:10.753 回答