Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate join table with other audit table

I have an audit table with revisioning and I want to create another table with one-to-many relation with the audit table revision. The audit revision will pointing to the new table data. How can I do that?

like image 894
Jordan Borisov Avatar asked May 20 '15 14:05

Jordan Borisov


1 Answers

I've done something similiar in a project that has student GPAs (audit table with revisions) and then a table with the CurrentGpa which always points to a lead revision from the GPA table. To do this I used the following structure:

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;
  }

  // ...
}
like image 131
Mark Roper Avatar answered Oct 05 '22 10:10

Mark Roper