Org.Postgresql.Util.PSQLException

时间:2014-04-07 20:32:18

标签: jpa

我有新问题添加表单我的问题在这里:当我尝试在我的类中添加一个新对象时,它显示外键被指定两次。

[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>  

请尽力帮助我。

1 个答案:

答案 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;