J'ai appris Hibernate ces dernières semaines, j'ai appris la plupart de ce que j'ai appris à travailler mais j'ai une question sur l'efficacité d'une cartographie One-to-Many. Cela fonctionne, mais je suis à peu près sûr qu'il pourrait être modifié un peu. Lors de l'enregistrement, je remarque que trois requêtes sont exécutées, une insertion pour l'objet "Parent", une insertion pour l'objet "Child" et une requête de mise à jour pour l'enfant qui met à jour la clé étrangère de l'objet parent. Mon hypothèse est qu'il existe un moyen plus efficace de mapper cette relation afin qu'il n'y ait que les deux inserts. Suis-je en train de manquer quelque chose d'assez évident dans ma cartographie?Efficacité en cascade Hibernate One-to-Many
Voici mon code:
Parent:
@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;
}
}
enfant:
@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;
}
}
Sortie SQL:
insert into Punch (punchDate, employeeId)
values (?, ?)
insert into PunchTimes (adjusted, inTime, outTime, punchId_fk)
values (?, ?, ?, ?)
update PunchTimes
set punchId_fk=?
where inoutId=?