Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@MappedSuperclass和子类中的相同JPA回调方法_Jpa - Fatal编程技术网

@MappedSuperclass和子类中的相同JPA回调方法

@MappedSuperclass和子类中的相同JPA回调方法,jpa,Jpa,我可以在父类和子类中定义与下面相同的JPA回调方法吗?如果是,是否需要调用super.onPrePersist();在子类onPrePersist()方法中 我已经为上述场景编写了一个单元测试,它可以正常工作。对于子类中的每个回调方法,必须首先调用父回调方法: @Override @PrePersist protected onPrePersist() { **super.onPrePersist();** System.out.println("Child onPrePersi

我可以在父类和子类中定义与下面相同的JPA回调方法吗?如果是,是否需要调用super.onPrePersist();在子类onPrePersist()方法中


我已经为上述场景编写了一个单元测试,它可以正常工作。对于子类中的每个回调方法,必须首先调用父回调方法:

@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");
    }
}
这将产生以下输出:

  • 调用了父onPrePersist()
  • 调用了子onPrePersist()

  • 您不必自己调用父回调方法,只要不重写带注释的方法
    @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");
        }
    }
    
    这将产生以下输出:

  • 调用了父onPrePersist()
  • 调用了子onPrePersist()

  • 测试时会发生什么?JPA实体是Java对象,遵循相同的规则。如果重写方法,将调用被重写的方法。测试时会发生什么?JPA实体是Java对象,遵循相同的规则。如果重写方法,将调用被重写的方法。