我不想插入表格"参与者"和表" Avis" (这些表之间的关系是一对多)。当我每次显示错误时运行应用程序。两个表中的插入是可以的,只有Table" Avis"中的外键中的问题,它取一个空值。 真的,我需要帮助,而且我是Java Developpemnt的初学者,所以它可能是一个愚蠢的错误。 这是我的managedBean:
@ManagedBean(name = "participBean")
@RequestScoped
public class ParticipBean implements Serializable {
private static final long serialVersionUID = 1L;
ApplicationContext context= new ClassPathXmlApplicationContext("beans.xml");
ParticipantService ParticipantServ=(ParticipantService);
context.getBean("ParticipantService");
AvisService AvisServ=(AvisService) context.getBean("AvisService");
private int idParticipant;
private Integer idAvis;
private Participant particip;
private Avis avis;
public Avis getAvis() {
return avis;
}
public void setAvis(Avis avis) {
this.avis = avis;
}
public int getId_avis() {
return idAvis;
}
public void setId_avis(Integer idAvis) {
this.idAvis = idAvis;
}
public Participant getParticip() {
return particip;
}
public void setParticip(Participant particip) {
this.particip = particip;
}
public int getId_interet() {
return id_interet;
}
public void setId_interet(int id_interet) {
this.id_interet = id_interet;
}
public Integer getId_participant() {
return idParticipant;
}
public void setId_participant(Integer idParticipant) {
this.idParticipant = idParticipant;
}
public ParticipBean() {
particip=new Participant();
avis=new Avis();
}
public void save(ActionEvent actionEvent){
Participant ad=ParticipantServ.findById(idParticipant);
avis.setParticipant(ad);
AvisServ.save(avis);
ParticipantServ.save(particip);
addMessage("Profil ajouté avec succès !");
avis=new Avis();
}
}
}
请帮忙吗? 这就是映射 Participant.java:
private Set<Avis>listeAvis=new HashSet<Avis>();
@OneToMany(mappedBy="participant",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
public Set<Avis> getListeAvis() {
return listeAvis;
}
public void setListeAvis(Set<Avis> listeAvis) {
this.listeAvis = listeAvis;
}
Avis.java:
private Participant participant;
@ManyToOne(targetEntity=com.pfeAndroid.Beans.Participant.class)
@JoinColumn(name="id_participant")
public Participant getParticipant() {
return participant;
}
public void setParticipant(Participant participant) {
this.participant = participant;
}
答案 0 :(得分:1)
我认为你的麻烦在于你首先要尝试保存avis对象以保存pertecipant对象。然后根据您的配置,您定义了一个级联礼貌,同意您只保存partecipant对象。总结一下,你可以这样做:
public void save(ActionEvent actionEvent){
Participant ad=ParticipantServ.findById(idParticipant);
avis.setParticipant(ad);
ParticipantServ.save(particip);
AvisServ.save(avis);
addMessage("Profil ajouté avec succès !");
avis=new Avis();
}
或
public void save(ActionEvent actionEvent){
Participant ad=ParticipantServ.findById(idParticipant);
ad.getListeAvis().add(avis)
ParticipantServ.save(particip);
addMessage("Profil ajouté avec succès !");
avis=new Avis();
}
答案 1 :(得分:1)
我解决了NPE的问题,这是函数save的正确代码:
public void save(ActionEvent actionEvent){
particip.setIdParticipant(idParticipant);
avis.setParticipant(particip);
particip.getListeAvis().add(avis);
ParticipantServ.save(particip);
AvisServ.save(avis);
addMessage("Profil ajouté avec succès !");
particip=new Participant();
avis=new Avis();
}