Java 类 之间的 Hibernate ORM 映射

Hibernate ORM mapping between Java classes

我有两场 Java 类 比赛(一场板球比赛)和球。在一场比赛中,会有很多球,每一个球都是一场比赛的一部分。在某种程度上,我需要这两个 类 之间的休眠映射,

  1. 如果我在匹配对象上调用保存,它应该能够保留球 table 中的所有包含球和匹配 table 中剩余的匹配细节。

  2. 如果我在球对象上调用保存或更新,首先它应该去匹配 table 以检查球对象中存在的匹配 ID 是否可用。如果它在那里,它应该保存或更新 ball table.

  3. 中的球对象

如果有人不知道板球比赛中的比赛-球关系,他可以认为是足球比赛-进球关系。在一场比赛中可以有 n 个进球,每个进球都是比赛的一部分。保存匹配还应该能够保存目标 table 中包含的所有目标,并且保存目标对象应该使用其 ID 检查匹配 table,然后应该将目标详细信息保存在目标 table 中。

谢谢。

我认为是@ManyToOne 和@OneToMany 注释对您有用。如果您要保存将(必须)包含目标列表的对象匹配,则每个目标都将与匹配一起保存。

Match.java

import javax.persistence.*;
import java.util.List;

@Entity
@Table(name = "match")
public class Match {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Integer id;

  @JsonBackReference
  @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinTable(name = "goal", joinColumns = {
        @JoinColumn(name = "match_id", nullable = false, updatable = false) },
        inverseJoinColumns = { @JoinColumn(name = "goal_id",
                nullable = false, updatable = false) })
    protected List<Goal> goals;
}

Goal.java

import javax.persistence.*;
import java.util.List;

@Entity
@Table(name = "goal")
public class Goal {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Integer id;

    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "match", joinColumns = {
        @JoinColumn(name = "goal_id", nullable = false, updatable = false) },
        inverseJoinColumns = { @JoinColumn(name = "match_id",
                nullable = false, updatable = false) })
    protected Match matche;

}
  • 匹配 class :

@OneToMany(mappedBy = "match", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Set<Ball> balls;

  • 球class:

@ManyToOne @JoinColumn(name = "MATCH_ID", nullable = false) private Match match;