@onetoMany关系上的EntityListner

时间:2014-03-27 07:16:37

标签: hibernate jpa hibernate-mapping spring-data spring-data-jpa

我正在通过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方法。这里有可能的审核案例。

  1. 当学生实体变更时(如学生姓名) - 控制权应转至@preUpdate
  2. 当学生和主题都变更时(向学生添加/删除主题列表并更新学生姓名) - 控制权应转至@preUpdate
  3. 当只有主题变更时(仅添加/删除主题列表)
  4. 我的第三个案例失败了 问题:每当学生的主题发生变化,我的拦截器就不会打电话。在dao层我只是使用JPA存储库SAVE方法来更新实体。 我需要每当我​​的子实体被更改时,我的父实体引用也需要更改,以便我的拦截器可以理解Student实体已被更改。

0 个答案:

没有答案