[英]getting exception when retrieving data from database org.hibernate.hql.ast.QuerySyntaxException:
Iam new to JPA, iam trying to create EJB 3.0 + JPA (hibernate) application. 我是JPA的新手,我试图创建EJB 3.0 + JPA(休眠)应用程序。 When iam persisting data into database getting below exception.
当iam将数据持久保存到数据库中时,出现异常。
sessionBean method: sessionBean方法:
@PersistenceContext
private EntityManager em;
public void showCustDetails(){
//System.out.println(em.getProperties());
//EntityManager em = emf.createEntityManager();
List customer = em.createQuery("select c from CUSTOMER c").getResultList();
System.out.println("List Size:::"+ customer.size());
for(Object c:customer){
Customer customers = (Customer) c;
System.out.println("Name ::::" + customers.getName() + "::customer id ::"+customers.getCustomer_id()+"::email::"+customers.getEmail_id()+"::address::"+customers.getAddress()+
":::ph number::"+customers.getPhNumber());
}
}
Customer class(entity class) 客户等级(实体等级)
package retail.model.vo;
import java.io.Serializable;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionManagement;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import static javax.ejb.TransactionManagementType.BEAN;
@Entity
@Table(name = "CUSTOMER")
//@TransactionAttribute(value=REQUIRED)
public class Customer implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5256938732963606407L;
private int customer_id;
private String name;
private String address;
private String email_id;
private int phNumber;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "customer_id")
public int getCustomer_id() {
return customer_id;
}
public void setCustomer_id(int customer_id) {
this.customer_id = customer_id;
}
@Column(name = "Name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "addres")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Column(name = "email_add")
public String getEmail_id() {
return email_id;
}
public void setEmail_id(String email_id) {
this.email_id = email_id;
}
@Column(name = "ph_number")
public int getPhNumber() {
return phNumber;
}
public void setPhNumber(int phNumber) {
this.phNumber = phNumber;
}
public String validate(){
if(name!=null && name!=""){
System.out.println("chandan");
return "viewCustomerDetails";
}
else{
return "viewCustomerDetails";
}
}
}
persistence.xml persistence.xml
<persistence-unit name="RetailUnit" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- the JNDI data source-->
<jta-data-source>java/customer</jta-data-source>
<properties>
<!-- if this is true, hibernate will print (to stdout) the SQL it executes,
so you can check it to ensure it's not doing anything crazy
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/company;create=true" />
<property name="hibernate.connection.username" value="user" />
<property name="hibernate.connection.password" value="123" /> -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<!-- since most database servers have slightly different versions of the
SQL, Hibernate needs you to choose a dialect so it knows the subtleties of
talking to that server -->
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
<property name="hibernate.archive.autodetection" value="class"/>
<!-- this tell Hibernate to update the DDL when it starts, very useful
for development, dangerous in production -->
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
Exception 例外
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: CUSTOMER is not mapped [select c from CUSTOMER c]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1376)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:280)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:436)
at retail.ejb.service.CustomerSessionBeanImpl.showCustDetails(CustomerSessionBeanImpl.java:47)
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:5388)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
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:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
... 51 more
Please anyone suggest on this. 请任何人对此提出建议。
Edit Out Put 编辑输出
INFO: Name ::::sdsdfsd::customer id ::0::email::sdsdfdsdssfd::address::sdfsdsdsdsdf:::ph number::0
INFO: Hibernate:
insert
into
CUSTOMER
(customer_id, addres, email_add, Name, ph_number)
values
(default, ?, ?, ?, ?)
INFO: Hibernate:
values
identity_val_local()
INFO: Hibernate:
select
customer0_.customer_id as customer1_0_,
customer0_.addres as addres0_,
customer0_.email_add as email3_0_,
customer0_.Name as Name0_,
customer0_.ph_number as ph5_0_
from
CUSTOMER customer0_
INFO: List Size:::1
INFO: Name ::::sdsdfsd::customer id ::1::email::sdsdfdsdssfd::address::sdfsdsdsdsdf:::ph number::0
The name of the entity must be spelled exactly as defined by the class name, independent of the table mapping, in your case it would be Customer
. 实体名称的拼写必须与类名称定义的完全相同,而与表映射无关,在您的情况下,名称为
Customer
。
To be exact, the String
corresponds to the output of myEntity.getClass().getSimpleName();
确切地说,
String
对应于myEntity.getClass().getSimpleName();
的输出myEntity.getClass().getSimpleName();
EDIT: JPQL != SQL 编辑:JPQL!= SQL
More often than not you will not get the same results (if any) using the same JPQL query with an SQL editor and vice versa. 通常,使用带有SQL编辑器的相同JPQL查询,您将不会获得相同的结果(如果有的话),反之亦然。 While SQL uses table identifiers, JPQL uses entities, corresponding to classes.
SQL使用表标识符,而JPQL使用与类相对应的实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.