2016-07-28 77 views
0

我有一個代碼如下:多個SQL插入

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 (?, ?, ?) 

回答

1

您需要確保在列表中的每個對象中都設置了父對象。 Cascade堅持將確保對象及其子對象保存並正確鏈接。不幸的是,如果它沒有明確設置,它不會在數據庫中創建關係。

for(OffreCompetence offreCompetence : offre.getOffreCompetences()) { 
     offreCompetence.setOffre(offre); 
    } 
    Offre o = offreRepository.save(offre); 
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將被保存。

JPA docsCascadeType

+0

請檢查我的編輯 –

+0

我知道我們都有點語言障礙的,但到底是什麼意思「我不能在數據庫中找到它們」?你有沒有交易?你最近怎麼樣?基本上,你真的需要提供一些關於**你如何爲我們提供幫助的細節。關於'他不知道Offre的ID',hibernate應該爲你處理這個映射。 '?'在日誌中只是佔位符。 – JudgingNotJudging

+0

感謝您的時間,我已經通過@KubenT答案解決了我的問題 –