我的代码如下:
Offre o = offreRepository.save(offre);
for(OffreCompetence offreCompetence : offre.getOffreCompetences()) {
offreCompetence.setOffre(o);
offreCompetenceRepository.save(offreCompetence);
}
因为您可以看到我第一次调用offreRepository
将Offre
插入数据库,然后我多次调用offreCompetenceRepository
来插入每个OffreCompetence
} {在Offre
到数据库。
这里的问题是我多次连接数据库。
有没有其他方法可以一次进行这些插入?
我尝试添加此行:
@OneToMany(cascade = CascadeType.ALL, mappedBy="offre")
private Set<OffreCompetences> offreCompetences;
但是offreCompetences
没有添加到数据库中,当我检查日志文件时,我注意到Hibernate没有插入它们但我在数据库中找不到它们,我认为问题出在他的时候尝试添加offreCompetences
他不知道Offre
的ID:
Hibernate: insert into offre (date_expiration, date_publication, duree_mission, email_sended, etat, niveau_experience, nombre_postulant, nombre_vue, poste, profil_recherche, titre, code_type_contrat, code_ville) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2016-07-28 16:08:13.237 DEBUG 10736 --- [nio-8080-exec-4] org.hibernate.SQL : insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
Hibernate: insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
2016-07-28 16:08:13.304 DEBUG 10736 --- [nio-8080-exec-4] org.hibernate.SQL : insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
Hibernate: insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
2016-07-28 16:08:13.339 DEBUG 10736 --- [nio-8080-exec-4] org.hibernate.SQL : insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
Hibernate: insert into offre_competence (competence, niveau_requis, offre) values (?, ?, ?)
答案 0 :(得分:1)
在offre.offreCompetences关系上设置CascadeType
。
@Entity
public class Offre {
@OneToMany(cascade = CascadeType.ALL, mappedBy="offre")
private Set<OffreCompetences> offreCompetences
...
}
@Entity
public class OffreCompetences {
@ManyToOne
@JoinColumn(name = "..." )
private Offre offre;
}
一旦你这样做,offreCompetences将在你保存offre时保存。
查看CascadeType
的{{3}}。
答案 1 :(得分:1)
您需要确保在列表中的每个对象中设置父对象。 Cascade持久化将确保正确保存和链接对象及其子对象。不幸的是,如果没有明确设置,它将不会在数据库中创建关系。
for(OffreCompetence offreCompetence : offre.getOffreCompetences()) {
offreCompetence.setOffre(offre);
}
Offre o = offreRepository.save(offre);