Hibernate在Java类之间的ORM映射
我有两个Java类匹配(一个板球比赛)和球。 在比赛中,会有很多球,每一个球都会成为比赛的一部分。 我需要以这种方式在这两个类之间进行hibernate映射,
如果我调用保存在匹配对象上,它应该能够将所有包含球的球保留在比赛表中并保留其余的比赛细节。
如果我打电话保存或更新球对象,首先应该去匹配表来检查球对象中存在的匹配ID是否可用。 如果在那里,它应该保存或更新球台中的球对象。
如果任何人不知道板球中的火球关系,他可以认为是足球比赛 - 目标关系。 在比赛中可以有n个目标,每个目标都将成为比赛的一部分。 Saving Match也应该能够将所有包含的目标保存在目标表中,并且保存目标对象应该使用其ID来检查匹配表,然后将目标详细信息保存到目标表中。
谢谢。
我认为这是@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;
}
@OneToMany(mappedBy = "match", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Set<Ball> balls;
@ManyToOne @JoinColumn(name = "MATCH_ID", nullable = false) private Match match;