我正在通过java持久性API的@entitylistners进行一些审计日志记录。我有一对多实体关系的场景,其中一个学生可以有多个科目。
学生实体
@Entity
@Table(name = "student")
@EntityListeners(AuditInterceptor.class)
public class Student
{
@id
@column("student_id")
private Integer studentId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "student", cascade = CascadeType.ALL,orphanRemoval=true)
private Set<Subjects> subjects= new HashSet<Subjects>(0);
// getter and setter
}
主题实体
@Entity
@Table(name = "subject")
public class Subject
{
@id
@column("subject_id")
private Integer subjectId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id")
private Student student;
// getter and setter
}
审计拦截器类
public class AuditInterceptor
{
@PreUpdate
public void preUpdate(Object entity)
{
//anycode
}
}
在用户界面上,一名学生可以选择多个科目。因此,每当学生实体更新时,我都会调用@preUpdate方法。这里有可能的审核案例。
我的第三个案例失败了 问题:每当学生的主题发生变化,我的拦截器就不会打电话。在dao层我只是使用JPA存储库SAVE方法来更新实体。 我需要每当我的子实体被更改时,我的父实体引用也需要更改,以便我的拦截器可以理解Student实体已被更改。