使用jsf和多对一关系插入到mysql中

时间:2014-07-23 07:18:37

标签: spring hibernate jsf

我不想插入表格"参与者"和表" 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;
}

2 个答案:

答案 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(); 
            }