Я изучал Hibernate в течение последних нескольких недель, я получил большую часть того, что я научился работать, но у меня есть вопрос об эффективности отображения один-ко-многим. Это работает, но я почти уверен, что его можно немного подправить. При сохранении я замечаю, что выполняются три запроса: вставка для объекта «Родитель», вставка для объекта «Дочерний», а затем запрос на обновление дочернего объекта, который обновляет внешний ключ для родительского объекта. Я предполагаю, что есть более эффективный способ отобразить эту взаимосвязь, так что есть только две вставки. Я упускаю что-то относительно очевидное в моем отображении?
Вот мой код:
Родитель:
@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=?