Java org.eclipse.persistence.exceptions.ValidationException:无法添加类型与现有查询冲突的查询
我有一个JavaEE任务,它基于一个由GlassFish、Maven和Derby构建的环境。我可以构建用户界面,但当我单击“创建”按钮时,它会抛出一个Java org.eclipse.persistence.exceptions.ValidationException:无法添加类型与现有查询冲突的查询,java,validation,jpa,jpql,Java,Validation,Jpa,Jpql,我有一个JavaEE任务,它基于一个由GlassFish、Maven和Derby构建的环境。我可以构建用户界面,但当我单击“创建”按钮时,它会抛出一个org.eclipse.persistence.exceptions.ValidationException 堆栈跟踪是: Caused by: Exception [EclipseLink-7092] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persi
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;
}
}
packagework2.ass2;
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.Query;
导入java.util.List;
/**
*@作者Antonio Goncalves
*一本压力书-用Glassfish开始JavaEE6
* http://www.apress.com/
* http://www.antoniogoncalves.org
* --
*/
@无国籍
公共类引导EJB{
// ======================================
//=属性=
// ======================================
@PersistenceContext(unitName=“work2PU”)
私人实体管理者;
// ======================================
//=公共方法=
// ======================================
公共列表findBoots(){
Query Query=em.createNamedQuery(“findAllBoots”);
返回query.getResultList();
}
公共列表findbootbytle(字符串sBoot){
Query query1=em.createNamedQuery(“searchingBoots”);
查询1.设置参数(“品脱”,sBoot);
返回query1.getResultList();
}
公共启动createBoot(启动启动){
em.persist(boot);
返回引导;
}
}
包装工程2.2;
导入javax.ejb.ejb;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.RequestScope;
导入java.util.ArrayList;
导入java.util.List;
/**
*@作者Antonio Goncalves
*一本压力书-用Glassfish开始JavaEE6
* http://www.apress.com/
* http://www.antoniogoncalves.org
* --
*/
@ManagedBean
(name=“bootController”)
@请求范围
公共类引导控制器{
// ======================================
//=属性=
// ======================================
@EJB
私有引导EJB引导EJB;
私有启动=新启动();
private List bootList=new ArrayList();
private List sBootList=new ArrayList();
// ======================================
//=公共方法=
// ======================================
公共字符串doCreateBoot(){
boot=bootEJB.createBoot(boot);
bootList=bootEJB.findBoots();
返回“成功”;
}
公共字符串doSearchBoot(字符串sBoot){
sBootList=bootEJB.findbootbytle(sBoot);
返回“findingBoots.xhtml”;
}
// ======================================
//=getter和setter=
// ======================================
公共引导getBoot(){
返回引导;
}
公共无效设置启动(启动启动启动){
this.boot=boot;
}
公共列表getBootList(){
返回引导列表;
}
公共void setBootList(列表引导列表){
this.bootList=引导列表;
}
公共列表getsBootList(){
返回引导列表;
}
public void setsBootList(列表sBootList){
this.sBootList=sBootList;
}
}
您在第二个名称查询中有一个错误
…它缺少位置
试着这样做:
@NamedQuery(name = "searchingBoots", query = "SELECT b FROM Boot b WHERE b.title= :pint")})
完整的堆栈跟踪将有助于…我无法理解堆栈跟踪我是大的但我将发布堆栈跟踪真正的异常似乎是:
[EclipseLink-7092]
:“无法添加类型与现有查询冲突的查询。要添加的查询:[ReadAllQuery(name=“FindLorders”referenceClass=Order jpql=“从订单b中选择b”)]". 这是关于订单对象,而不是靴子。谢谢,但我如何才能使ti正确?我对查询没有太多的基本知识。谢谢,我相信unwichtich的回答会解决这个问题。当部署失败时,有时会出现此错误消息,但应用程序仍会继续并尝试获取EntityManager—这会导致它重复部署过程的一部分,特别是处理它可能已经处理过的命名查询,使其看起来好像存在重复项。您需要在部署日志中查找阻止成功部署的警告和错误,或者升级到更高版本(如2.4.2或2.5),在该版本中,错误会变得更明显。