Iam new to JPA, iam trying to create EJB 3.0 + JPA (hibernate) application. When iam persisting data into database getting below exception.
sessionBean method:
@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-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
.
To be exact, the String
corresponds to the output of myEntity.getClass().getSimpleName();
EDIT: 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. While SQL uses table identifiers, JPQL uses entities, corresponding to classes.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.