@MappedSuperclass和子类中的相同JPA回调方法
我可以在父类和子类中定义与下面相同的JPA回调方法吗?如果是,是否需要调用super.onPrePersist();在子类onPrePersist()方法中@MappedSuperclass和子类中的相同JPA回调方法,jpa,Jpa,我可以在父类和子类中定义与下面相同的JPA回调方法吗?如果是,是否需要调用super.onPrePersist();在子类onPrePersist()方法中 我已经为上述场景编写了一个单元测试,它可以正常工作。对于子类中的每个回调方法,必须首先调用父回调方法: @Override @PrePersist protected onPrePersist() { **super.onPrePersist();** System.out.println("Child onPrePersi
我已经为上述场景编写了一个单元测试,它可以正常工作。对于子类中的每个回调方法,必须首先调用父回调方法:
@Override
@PrePersist
protected onPrePersist() {
**super.onPrePersist();**
System.out.println("Child onPrePersist() invoked");
}
我已经为上述场景编写了一个单元测试,它可以正常工作。对于子类中的每个回调方法,必须首先调用父回调方法:
@Override
@PrePersist
protected onPrePersist() {
**super.onPrePersist();**
System.out.println("Child onPrePersist() invoked");
}
您不必自己调用父回调方法,只要不重写带注释的方法
@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");
}
}
这将产生以下输出:
您不必自己调用父回调方法,只要不重写带注释的方法
@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");
}
}
这将产生以下输出:
测试时会发生什么?JPA实体是Java对象,遵循相同的规则。如果重写方法,将调用被重写的方法。测试时会发生什么?JPA实体是Java对象,遵循相同的规则。如果重写方法,将调用被重写的方法。