java - org.eclipse.persistence.exceptions.ValidationException : Cannot add a query whose types conflict with an existing query

标签 java validation jpa jpql

我有一个 Java EE 作业,该作业基于使用 GlassFish、Maven 和 Derby 构建的环境。我可以构建用户界面,但是当我单击“创建”按钮时,它会抛出 org.eclipse.persistence.exceptions.ValidationException

堆栈跟踪是:

Caused by: Exception [EclipseLink-7092] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Cannot add a query whose types conflict with an existing query. Query To Be Added: [ReadAllQuery(name="findAllOrders" referenceClass=Order jpql="SELECT b FROM Order b")] is named: [findAllOrders] with arguments [[]].The existing conflicting query: [ReadAllQuery(name="findAllOrders" referenceClass=Order jpql="SELECT b FROM Order b")] is named: [findAllOrders] with arguments: [[]].
    at org.eclipse.persistence.exceptions.ValidationException.existingQueryTypeConflict(ValidationException.java:888)
    at org.eclipse.persistence.internal.sessions.AbstractSession.addQuery(AbstractSession.java:422)
    at org.eclipse.persistence.internal.sessions.AbstractSession.addQuery(AbstractSession.java:395)
    at org.eclipse.persistence.internal.sessions.AbstractSession.processJPAQueries(AbstractSession.java:2175)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:414)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:680)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:641)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:249)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:237)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:208)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
    at work2.ass2.BootEJB.createBoot(BootEJB.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    ... 45 more

实体是:

    package work2.ass2;

    import javax.persistence.*;

    @Entity
    @NamedQueries({
                @NamedQuery(name = "findAllBoots", query = "SELECT b FROM Boot b"),
                @NamedQuery(name = "searchingBoots", query = "SELECT b FROM Boot b b.title= :pint")})
    public class Boot {

        // ======================================
        // =             Attributes             =
        // ======================================
        @Id
        @GeneratedValue
        private Long id;
        @Column(nullable = false)
        private String title;
        private Float price;
        @Column(length = 2000)
        private String description;
        private String producer;
        private String color;
        private Integer size;
        private Boolean illustrations;

        // ======================================
        // =            Constructors            =
        // ======================================

        public Boot() {
        }

        public Boot(String title, Float price, String description, String color, Integer size, Boolean illustrations) {
            this.title = title;
            this.price = price;
            this.description = description;
            this.producer = producer;
            this.color = color;
            this.size = size;
            this.illustrations = illustrations;
        }

        // ======================================
        // =          Getters & Setters         =
        // ======================================
        public Long getId() {
            return id;
        }

          public String getProducer() {
            return producer;
        }

        public void setProducer (String producer) {
            this.producer = producer;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public Float getPrice() {
            return price;
        }

        public void setPrice(Float price) {
            this.price = price;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public Integer getSize() {
            return size;
        }

        public void setSize(Integer size) {
            this.size= size;
        }

        public Boolean getIllustrations() {
            return illustrations;
        }

        public void setIllustrations(Boolean illustrations) {
            this.illustrations = illustrations;
        }

        // ======================================
        // =         hash, equals, toString     =
        // ======================================

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder();
            sb.append("Boot");
            sb.append("{id=").append(id);
            sb.append(", Producer='").append(producer).append('\'');
            sb.append(", title='").append(title).append('\'');
            sb.append(", price=").append(price);
            sb.append(", description='").append(description).append('\'');
            sb.append(", color='").append(color).append('\'');
            sb.append(", size=").append(size);
            sb.append(", illustrations=").append(illustrations);
            sb.append('}');
            return sb.toString();
        }
    }

服务是:

    package work2.ass2;

    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
    import java.util.List;

    /**
     * @author Antonio Goncalves
     *         APress Book - Beginning Java EE 6 with Glassfish
     *         http://www.apress.com/
     *         http://www.antoniogoncalves.org
     *         --
     */
    @Stateless
    public class BootEJB {

        // ======================================
        // =             Attributes             =
        // ======================================

        @PersistenceContext(unitName = "work2PU")
        private EntityManager em;

        // ======================================
        // =           Public Methods           =
        // ======================================

        public List<Boot> findBoots() {
            Query query = em.createNamedQuery("findAllBoots");
            return query.getResultList();
        }

        public List <Boot> findBootByTitle(String sBoot) {
            Query query1 = em.createNamedQuery("searchingBoots");
            query1.setParameter("pint",sBoot);
            return query1.getResultList();
        }

        public Boot createBoot(Boot boot) {
            em.persist(boot);
            return boot;
        }
    }


    package work2.ass2;

    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import java.util.ArrayList;
    import java.util.List;

    /**
     * @author Antonio Goncalves
     *         APress Book - Beginning Java EE 6 with Glassfish
     *         http://www.apress.com/
     *         http://www.antoniogoncalves.org
     *         --
     */
    @ManagedBean
    (name = "bootController")
    @RequestScoped
    public class BootController {

        // ======================================
        // =             Attributes             =
        // ======================================

        @EJB
        private BootEJB bootEJB;

        private Boot boot = new Boot();
        private List<Boot> bootList = new ArrayList<Boot>();
        private List<Boot> sBootList = new ArrayList<Boot>();

        // ======================================
        // =           Public Methods           =
        // ======================================

        public String doCreateBoot() {
            boot = bootEJB.createBoot(boot);
            bootList = bootEJB.findBoots();
            return "success";
        }
        public String doSearchBoot(String sBoot) {


                    sBootList = bootEJB.findBootByTitle(sBoot);
                    return "findingBoots.xhtml";
        }

        // ======================================
        // =          Getters & Setters         =
        // ======================================


        public Boot getBoot() {
            return boot;
        }

        public void setBoot(Boot boot) {
            this.boot = boot;
        }

        public List<Boot> getBootList() {
            return bootList;
        }

        public void setBootList(List<Boot> bootList) {
    this.bootList = bootList;
        }
        public List<Boot> getsBootList() {
                return bootList;
        }

        public void setsBootList(List<Boot> sBootList) {
                this.sBootList = sBootList;
        }

    }

最佳答案

第二个 NamedQuery 出现错误...它缺少 WHERE

尝试这样:

@NamedQuery(name = "searchingBoots", query = "SELECT b FROM Boot b WHERE b.title= :pint")})

关于java - org.eclipse.persistence.exceptions.ValidationException : Cannot add a query whose types conflict with an existing query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18917215/

相关文章:

java - 是否可以通过 post 协议(protocol)获取返回值?

java - 将文本转换为 URL

java - 如何从结果集对象返回多行以发送 servlet

java - 更新整个 JFrame,包括所有 JComponent

c# - Fluent Validator 缺少 SetCollectionValidator() 方法

java - 如何编写此 JPQL 查询?

ruby-on-rails - 真的需要验证外键吗?

javascript - 模糊的 JQuery 验证

java - Spring JPA : Insert succesfully but Update Failed (javax. persistence.PersistenceException:托管刷新期间出错)

java - 在 Hibernate 中使用 JPA 注释来描述外键仅在子表中的 @OneToMany 关系