Reputation: 37
I've a Java EE assignment which is based on an environment built with GlassFish, Maven and Derby. I can build the user interface, but when I click the "create" button, it throws an org.eclipse.persistence.exceptions.ValidationException
.
The stack trace is:
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
The entity is:
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();
}
}
The service is:
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;
}
}
Upvotes: 0
Views: 5840
Reputation: 13857
You have an error in the 2nd NamedQuery
...it is missing the WHERE
.
Try it like this:
@NamedQuery(name = "searchingBoots", query = "SELECT b FROM Boot b WHERE b.title= :pint")})
Upvotes: 2