過去数週間、Hibernate を学習してきました。学んだことのほとんどは機能するようになりましたが、1 対多マッピングの効率について質問があります。それは機能しますが、かなり微調整できると確信しています。保存すると、「親」オブジェクトの挿入、「子」オブジェクトの挿入、および親オブジェクトの外部キーを更新する子の更新クエリの 3 つのクエリが実行されることに気付きました。私の推測では、この関係をマップして 2 つの挿入だけにするより効率的な方法があると思います。マッピングで比較的明らかな何かが欠けていますか?
これが私のコードです:
親:
@Entity
@Table(name="Punch")
public class Punch implements Serializable
{
private Long id;
private DateTime punchDate;
private Integer userId;
private List<PunchTimes> punches= new ArrayList<PunchTimes>();
private static final long serialVersionUID=2010010611;
...Various getters & setters...
@OneToMany
@JoinColumn(name="punchId_fk")
@OrderBy("pid")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public List<PunchTimes> getPunches()
{
return punches;
}
}
子:
@Entity
@Table(name = "PunchTimes")
public class PunchTimes implements Serializable{
private Long id;
private Long pid;
private DateTime inTime;
private DateTime outTime;
private Double adjustedTime;
private static final long serialVersionUID = 20100106;
private Punch punch;
...Various getters & setters...
@ManyToOne
@JoinColumn(name = "punchId_fk", insertable = false, updatable = false)
public Punch getPunch(){
return punch;
}
}
SQL 出力:
insert into Punch (punchDate, employeeId)
values (?, ?)
insert into PunchTimes (adjusted, inTime, outTime, punchId_fk)
values (?, ?, ?, ?)
update PunchTimes
set punchId_fk=?
where inoutId=?