Java 未调用JPA@Pre和@Post回调
我在Hibernate上使用SpringBoot2和JPA 我必须使一些实体具有特殊的审计功能。我可以简单地使用entity类中的Java 未调用JPA@Pre和@Post回调,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我在Hibernate上使用SpringBoot2和JPA 我必须使一些实体具有特殊的审计功能。我可以简单地使用entity类中的@PrePersist/@pospersist回调来实现它 我想把这个回调放在基类中。但是,如果这个基类是一个没有@Entity注释的简单java类,则不会调用回调。 如果我将@Entity注释也放在基类上,那么我会得到一个错误表'my_base_class_Entity'不存在 这是有效的: @Entity @Table(name = "document") pub
@PrePersist
/@pospersist
回调来实现它
我想把这个回调放在基类中。但是,如果这个基类是一个没有@Entity
注释的简单java类,则不会调用回调。
如果我将@Entity
注释也放在基类上,那么我会得到一个错误表'my_base_class_Entity'不存在
这是有效的:
@Entity
@Table(name = "document")
public class JpaDocument {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
...
@PrePersist
public void prePersist(){
logger.debug("PrePersist started");
}
}
这不会(不调用回调函数)
可能我应该在我的
特殊性
类中添加@Entity
注释,但它迫使我添加主键,我不希望添加主键,因为它在子实体中并不总是相同的。除此之外,特殊性
没有数据库关系,它不是一个真正的实体。解决方案非常简单。感谢@JB_\Nizet的评论。
将@Entity
注释添加到基类中,而不是@MappedSuperclass
注释,因此它工作正常
@MappedSuperclass
public class SpecialEntity {
@PrePersist
public void prePersist(){
logger.debug("PrePersist started");
}
}
@Entity
@Table(name = "document")
public class JpaDocument extends SpecialEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
...
}
解决办法很简单。感谢@JB_\Nizet的评论。 将
@Entity
注释添加到基类中,而不是@MappedSuperclass
注释,因此它工作正常
@MappedSuperclass
public class SpecialEntity {
@PrePersist
public void prePersist(){
logger.debug("PrePersist started");
}
}
@Entity
@Table(name = "document")
public class JpaDocument extends SpecialEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
...
}
哦,就是这样。它可以与
@MappedSuperclass
配合使用。非常感谢@你能把这个作为答案吗?哦,就是这样。它可以与@MappedSuperclass
配合使用。非常感谢@你能把这个作为答案吗?