Jsf 2.2 SelectOneMenu引发数据库异常

Jsf 2.2 SelectOneMenu引发数据库异常,jsf-2.2,Jsf 2.2,在我的应用程序中,用户必须创建一个员工列表,在指定员工为哪个服务工作时,我使用了oneSelectMenu,但在测试它时,它会抛出一个数据库异常,试图在服务表中插入值(这是不对的,因为我试图在员工表中保存值) 这是我的员工ManagedBean代码 @ManagedBean(name="persMb") @SessionScoped public class PersonnelMb { private List<ServiceInterne> serviceInternesList;

在我的应用程序中,用户必须创建一个员工列表,在指定员工为哪个服务工作时,我使用了oneSelectMenu,但在测试它时,它会抛出一个数据库异常,试图在服务表中插入值(这是不对的,因为我试图在员工表中保存值) 这是我的员工ManagedBean代码

@ManagedBean(name="persMb")
@SessionScoped
public class PersonnelMb {
private List<ServiceInterne> serviceInternesList;
private List<Personnel> personnelsList;

private DataModel personnels;
private Integer idPers;
private ServiceInterne selectedService;
private Personnel newPersonnel = new Personnel();
private Personnel editPersonnel;
private ServiceInterneDao sDao = new ServiceInterneDao();
private PersonnelDao pDao = new PersonnelDao();

public String create() {
System.out.println("selected Service "+selectedService);
    newPersonnel.setServiceInterne(selectedService);
    pDao.ajouter(newPersonnel);
    newPersonnel = new Personnel();
    personnels.setWrappedData(pDao.selectAll());
    FacesMessage msg = new FacesMessage("Ajout effectué avec succés");
    FacesContext.getCurrentInstance().addMessage(null, msg);
    return "list";
}

我的RDBMS是Oracle 10g xe,我的IDE是eclipse Kepler

请删除所有不相关的代码,因为噪音太大了。至于错误,它与jsf无关,而是与您的持久性模型有关。我看到您正在使用jpa(eclipselink)。您必须显示Dao和实体。你是如何将dao注入托管bean的?我确实解决了这个问题。在员工和服务之间的关联@ManyToOne中,我将cascade=CascadeType.All设置为cascade=CascadeType.All,因此每次我创建员工时,它都会尝试创建一个服务,通过删除它,一切都很好
                            <p:column>
                                <p:selectOneMenu value="#{persMb.selectedService}"
                                    converter="ServiceInterneConverter">
                                    <f:selectItems value="#{servInterMb.serviceInternesList}"
                                        var="s" itemLabel="#{s.libelle}" itemValue="#{s}">
                                    </f:selectItems>
                                </p:selectOneMenu>
                            </p:column>
                        </p:row>
                        2014-03-06T14:34:50.556+0100|Infos: [EL Warning]: 2014-03-06                14:34:50.555--UnitOfWork(1946319022)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
                 Internal Exception: java.sql.SQLException: ORA-00001: violation de contrainte unique (ELSA.SYS_C008545)
                 Error Code: 1
               Call: INSERT INTO Service_Interne (IDSERVICEINTER, LIBELLE, MISSION) VALUES (?, ?, ?)
bind => [3 parameters bound]
          Query: InsertObjectQuery(com.oratech.model.ServiceInterne@2140b3d2)
                2014-03-06T14:34:50.558+0100|Avertissement: #{persMb.create}: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
       Internal Exception: java.sql.SQLException: ORA-00001: violation de contrainte unique (ELSA.SYS_C008545)
          Error Code: 1
          Call: INSERT INTO Service_Interne (IDSERVICEINTER, LIBELLE, MISSION) VALUES (?, ?, ?)
bind => [3 parameters bound]
       Query: InsertObjectQuery(com.oratech.model.ServiceInterne@2140b3d2)
            javax.faces.FacesException: #{persMb.create}: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
         Internal Exception: java.sql.SQLException: ORA-00001: violation de contrainte unique (ELSA.SYS_C008545)
           Error Code: 1
     Call: INSERT INTO Service_Interne (IDSERVICEINTER, LIBELLE, MISSION) VALUES (?, ?, ?)
bind => [3 parameters bound]
     Query: InsertObjectQuery(com.oratech.model.ServiceInterne@2140b3d2)
at                 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)