Я использую Spring Boot 2 с JPA поверх Hibernate.
Мне нужно сделать так, чтобы некоторые сущности имели специальную функцию аудита.Я могу просто реализовать это, используя обратные вызовы @PrePersist
/ @PostPersist
в классе сущности.
Я хотел бы поместить эти обратные вызовы в базовый класс.Однако если этот базовый класс является простым Java-классом без аннотации @Entity
, то обратные вызовы не вызываются.Если я добавлю также @Entity
аннотацию на базовый класс, то получу ошибку Table 'my_base_class_entity' doesn't exist
.
Это работает:
@Entity
@Table(name = "document")
public class JpaDocument {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
...
@PrePersist
public void prePersist(){
logger.debug("PrePersist started");
}
}
Этоне (функция обратного вызова не вызывается)
public abstract 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;
...
}
Возможно, я должен добавить аннотацию @Entity
в свой класс SpecialEntity
, но это заставляет меня добавлять первичный ключ, что я не делаюне хочу, поскольку это не всегда одинаково для дочерних объектов.Кроме того, SpecialEntity
не имеет отношения к базе данных, это не реальная сущность.