Hibernate与其他审计表联接表

10

我有一个带版本控制的审计表,我想创建另一个与审计表版本具有一对多关系的表。审计版本将指向新表数据。我该如何实现这个功能?


请从http://stackoverflow.com/q/30184227/845849检查我的答案。 - Suken Shah
我不想改变revinfo表,我只想将修订版本用作与其他表的关联。 - Jordan Borisov
啊,好的,明白了。在这种情况下,你可以简单地将默认修订实体(org.hibernate.envers.DefaultRevisionEntity)映射到你所需的实体表中。 - Suken Shah
1
好的,谢谢。您能否将您的评论作为答案并附上一些示例,以便我将其标记为正确答案? :) - Jordan Borisov
如果我的下面的回答有帮助到您,您是否介意接受它呢? - Mark Roper
1个回答

2

我曾在一个学生成绩单项目中做过类似的事情(带有修订的审核表和一个始终指向GPA表中领先修订的CurrentGpa表)。为了完成这个任务,我使用了以下结构:

CurrentGpa.java

@Entity(name = HibernateConsts.CURRENT_GPA_TABLE)
public class CurrentGpa {
  protected Gpa gpa;
  protected Student student;
  protected Long id;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = HibernateConsts.CURRENT_GPA_ID)
  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  @OneToOne(optional = true, fetch= FetchType.EAGER)
  @Fetch(FetchMode.JOIN)
  @JoinColumn(name = HibernateConsts.GPA_FK)
  public Gpa getGpa() {
    return gpa;
  }

  public void setGpa(Gpa gpa) {
    this.gpa = gpa;
  }

  @OneToOne(optional = true, fetch= FetchType.EAGER)
  @Fetch(FetchMode.JOIN)
  @JoinColumn(name = HibernateConsts.STUDENT_FK)
  public Student getStudent() {
    return student;
  }

  public void setStudent(Student student) {
    this.student = student;
  }

  // ...
}

Gpa.java

@Entity(name = HibernateConsts.GPA_TABLE)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Gpa {
  protected Long studentId;
  protected Double score;
  protected LocalDate startDate;
  protected LocalDate endDate;
  protected LocalDate calculationDate;
  protected Long id;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = HibernateConsts.GPA_ID)
  public Long getId() { return id; }

  public void setId(Long id) {
    this.id = id;
  }

  @Column(name = HibernateConsts.STUDENT_FK)
  public Long getStudentId() {
    return studentId;
  }

  public void setStudentId(Long studentId) {
    this.studentId = studentId;
  }

  @Column(name = HibernateConsts.GPA_SCORE)
  public Double getScore() {
    return score;
  }

  public void setScore(Double score) {
    this.score = score;
  }

  @Column(name = HibernateConsts.GPA_START_DATE)
  public LocalDate getStartDate() {
    return startDate;
  }

  public void setStartDate(LocalDate startDate) {
    this.startDate = startDate;
  }

  @Column(name = HibernateConsts.GPA_END_DATE)
  public LocalDate getEndDate() {
    return endDate;
  }

  // ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接