2016-07-28 81 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答案解决了我的问题 –