我有新问题添加表单我的问题在这里:当我尝试在我的类中添加一个新对象时,它显示外键被指定两次。
[EL Warning]: 2014-04-07 22:27:31.89--UnitOfWork(14615199)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERREUR: la colonne « idService » est spécifiée plus d'une fois
Position : 94 Error Code: 0
Call: INSERT INTO FONCTION ("codeFonction", "commentaireFonction", "idService", "libelleFonction", "idService") VALUES (?, ?, ?, ?, ?)
bind => [5 parameters bound]
Query: InsertObjectQuery(bean.Fonction@4072c1)
avr. 07, 2014 10:27:31 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
Avertissement: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERREUR: la colonne « idService » est spécifiée plus d'une fois
Position : 94
Error Code: 0
Call: INSERT INTO FONCTION ("codeFonction", "commentaireFonction", "idService", "libelleFonction", "idService") VALUES (?, ?, ?, ?, ?)
bind => [5 parameters bound]
Query: InsertObjectQuery(bean.Fonction@4072c1)
javax.el.ELException: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERREUR: la colonne « idService » est spécifiée plus d'une fois
Position : 94
Error Code: 0
Call: INSERT INTO FONCTION ("codeFonction", "commentaireFonction", "idService", "libelleFonction", "idService") VALUES (?, ?, ?, ?, ?)
bind => [5 parameters bound]
Query: InsertObjectQuery(bean.Fonction@4072c1)
at org.apache.el.parser.AstValue.invoke(AstValue.java:277)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
..........
java bean:
package bean;
import java.io.Serializable;
import javax.persistence.*;
import java.util.List;
/**
* The persistent class for the fonction database table.
*
*/
@Entity
@NamedQuery(name="Fonction.findAll", query="SELECT f FROM Fonction f")
public class Fonction implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="\"codeFonction\"")
private Integer codeFonction;
@Column(name="\"commentaireFonction\"")
private String commentaireFonction;
@Column(name="\"idService\"")
private Integer idService;
@Column(name="\"libelleFonction\"")
private String libelleFonction;
//bi-directional many-to-one association to Exiger
@OneToMany(mappedBy="fonction")
private List<Exiger> exigers;
//bi-directional many-to-one association to Service
@ManyToOne
@JoinColumn(name="\"idService\"")
private Service service;
//bi-directional many-to-one association to Occuper
@OneToMany(mappedBy="fonction")
private List<Occuper> occupers;
public Fonction() {
}
public Integer getCodeFonction() {
return this.codeFonction;
}
public void setCodeFonction(Integer codeFonction) {
this.codeFonction = codeFonction;
}
public String getCommentaireFonction() {
return this.commentaireFonction;
}
public void setCommentaireFonction(String commentaireFonction) {
this.commentaireFonction = commentaireFonction;
}
public Integer getIdService() {
return this.idService;
}
public void setIdService(Integer idService) {
this.idService = idService;
}
public String getLibelleFonction() {
return this.libelleFonction;
}
public void setLibelleFonction(String libelleFonction) {
this.libelleFonction = libelleFonction;
}
public List<Exiger> getExigers() {
return this.exigers;
}
public void setExigers(List<Exiger> exigers) {
this.exigers = exigers;
}
public Exiger addExiger(Exiger exiger) {
getExigers().add(exiger);
exiger.setFonction(this);
return exiger;
}
public Exiger removeExiger(Exiger exiger) {
getExigers().remove(exiger);
exiger.setFonction(null);
return exiger;
}
public Service getService() {
return this.service;
}
public void setService(Service service) {
this.service = service;
}
public List<Occuper> getOccupers() {
return this.occupers;
}
public void setOccupers(List<Occuper> occupers) {
this.occupers = occupers;
}
public Occuper addOccuper(Occuper occuper) {
getOccupers().add(occuper);
occuper.setFonction(this);
return occuper;
}
public Occuper removeOccuper(Occuper occuper) {
getOccupers().remove(occuper);
occuper.setFonction(null);
return occuper;
}
}
Dao班:
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import bean.Fonction;
public class FonctionDao {
private static final String JPA_UNIT_NAME = "zod";
private EntityManager entityManager;
protected EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = Persistence.createEntityManagerFactory(JPA_UNIT_NAME).createEntityManager();
}
return entityManager;
}
public List<Fonction> selectAll() {
List<Fonction> fcts = getEntityManager().createQuery("select f from Fonction f").getResultList();
return fcts;
}
public Fonction insert(Fonction u) {
getEntityManager().getTransaction().begin();
getEntityManager().persist(u);
getEntityManager().getTransaction().commit();
return u;
}
public void delete(Fonction u) {
getEntityManager().getTransaction().begin();
u = getEntityManager().merge(u);
getEntityManager().remove(u);
getEntityManager().getTransaction().commit();
}
public Fonction update(Fonction u) {
getEntityManager().getTransaction().begin();
u = getEntityManager().merge(u);
getEntityManager().persist(u);
getEntityManager().getTransaction().commit();
return u;
}
}
托管bean:
package control;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import bean.Fonction;
import dao.FonctionDao;
@ViewScoped
public class FonctionCtrl {
private FonctionDao fDao= new FonctionDao();
private List<Fonction> fonctions;
private Fonction newFonction;
@PostConstruct
public void init() {
newFonction = new Fonction();
}
public List<Fonction> getFonctions() {
if(fonctions==null){
fonctions= fDao.selectAll();
}
return fonctions;
}
public Fonction getNewFonction() {
return newFonction;
}
public void setNewFonction(Fonction newFonction) {
this.newFonction = newFonction;
}
//creation nv objet
public String createPerson() {
fDao.insert(newFonction);
newFonction = new Fonction();
fonctions = fDao.selectAll();
return "list";
}
//supprimer un objet
public String deletePerson() {
fDao.delete(newFonction);
newFonction = new Fonction();
fonctions = fDao.selectAll();
return null;
}
public String updatePerson() {
fDao.update(newFonction);
newFonction= new Fonction();
fonctions = fDao.selectAll();
return "li";
}
}
观点:
<ui:composition template="../layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
>
<ui:define name="title">ZODIAC AEROSPACE - SGC : Paramétrage des fonctions</ui:define>
<ui:define name="main">
<div style="width:1150px; margin:0 auto">
<p:panelGrid columns="2" style="border:none !important">
<p:panel>
<ui:include src="menu.xhtml"></ui:include>
</p:panel>
<p:panel style="padding-left:10px; padding-top:0">
<h3>Gestion des fonctions</h3>
<br/>
<p:fieldset legend="Ajouter / modifier / supprimer une fonction" id="fonctionForm" style="width:850px" toggleable="true">
<h:form style="border:none" id="form1">
<p:panelGrid>
<p:row>
<p:column>
<h:outputLabel styleClass="label" for="codeFonction" value="Code fonction:" />
</p:column>
<p:column>
<p:inputText id="codeFonction" value="#{fonctionCtrl.newFonction.codeFonction}" label="Code fonction" size="5" maxlength="3" required="true"/>
</p:column>
</p:row>
<p:row>
<p:column>
<h:outputLabel styleClass="label" for="libelleFonction" value="Libellé :" />
</p:column>
<p:column>
<p:inputText id="libelleFonction" value="#{fonctionCtrl.newFonction.libelleFonction}" label="Libellé de la fonction" size="50" maxlength="50" required="true"/>
</p:column></p:row>
<p:row><p:column>
<h:outputLabel styleClass="label" for="commentaireFonction" value="Commentaire :" />
</p:column>
<p:column>
</p:column>
</p:row>
<p:row>
<p:column>
<h:outputLabel styleClass="label" for="idService" value="Service :" />
</p:column>
<p:column>
</p:column>
</p:row>
<p:row>
<p:column colspan="2"> </p:column>
</p:row>
<p:row>
<p:column colspan="2">
<p:commandButton update=":form2" value="Ajouter / Modifier la fonction" actionListener="#{fonctionCtrl.createPerson}" icon="ui-icon-disk" />
<p:commandButton update=":form2" value="Supprimer fonction" actionListener="#{fonctionCtrl.deletePerson}" icon="ui-icon-trash" />
</p:column>
</p:row>
</p:panelGrid>
</h:form>
</p:fieldset>
<br/>
<p:fieldset legend="Liste des fonctions" id="fonctionsList" style="width:850px" toggleable="true">
<h:form style="border:none" id="form2">
<p:outputPanel>
<p:dataTable id="fonctionsTable" var="bean" value="#{fonctionCtrl.fonctions}" resizableColumns="true" rows="50"
scrollable="true" scrollHeight="200" rowKey="#{bean.codeFonction}"
selection="#{fonctionBean.selectedFonction}" selectionMode="single">
<p:column headerText="Code" width="70" sortBy="#{bean.codeFonction}">
<h:outputText value="#{bean.codeFonction}" />
</p:column>
<p:column headerText="Libellé " width="200" sortBy="#{bean.libelleFonction}">
<h:outputText value="#{bean.libelleFonction}"/>
</p:column>
<p:column headerText="Commentaire">
<h:outputText value="#{bean.commentaireFonction}"/>
</p:column>
<p:column headerText="Service">
<h:outputText value="#{bean.idService}"/>
</p:column>
请尽力帮助我。
答案 0 :(得分:0)
我认为问题的根本原因与Fonction
实体定义有关,因为它会生成两个具有相同名称的idService
列:
public class Fonction implements Serializable {
@Column(name="\"idService\"") // the primary key
private Integer idService;
@ManyToOne
@JoinColumn(name="\"idService\"") //the foreign key related to Service
private Service service;
}
因此行插入失败。尝试重命名其中一个关键列,即
@Column(name="\"idFonction\"") // the primary key
private Integer idFonction;