本文介绍了Hibernate抛出一个QuerySyntaxException与给定的正确的类名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
-
我有一个
Product
类;
@Entity
public class Product {
.
.
public Product() { }
.
.
}
通用DAO;
A generic DAO;
public class GenericDao<T> {
private Class<T> type;
@Inject
protected EntityManager entityManager;
public GenericDao() { }
public List<T> list() {
return entityManager.createQuery("FROM " + type.getSimpleName(), type).getResultList();
}
}
产品DAO类;
A Product DAO class;
public class ProductDao extends BaseDao<Product> { }
产品JAX-RS服务;
A product JAX-RS service;
@Path("/product")
public class ProductService {
@Inject
private ProductDao productDao;
@GET
@Path("/getProducts")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> getProducts() {
List<Product> response = productDao.list();
return response;
}
}
当我运行应用程序并调用端点时,我得到了一个不错的QuerySyntaxException;
When I run the app and make a call to the endpoint I get a nice QuerySyntaxException;
org.jboss.resteasy.spi.UnhandledException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Product is not mapped [FROM Product]
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="mainconfig">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/awsapp" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="javax.persistence.jdbc.user" value="${conf.jdbc.user}" />
<property name="javax.persistence.jdbc.password" value="${conf.jdbc.password}" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
推荐答案
为避免冲突,请在实现类中指定您的类和实体管理器.例子:
To avoid conflicts, specify your Class and entity manager in implementation classes. Example :
public abstract class GenericDao<T> {
private Class<T> clazz;
public GenericDao(Class<T> clazz) {
this.clazz = clazz;
}
public T getById(Long key) {
return getEntityManager().find(clazz, key);
}
protected abstract EntityManager getEntityManager();
}
然后是您的实现类:
public class ProductDao extends BaseDao<Product> {
@PersistenceContext
private EntityManager em;
public ProductDao(){
super(Product.class);
}
/**
* {@inheritDoc}
*/
@Override
protected EntityManager getEntityManager() {
return em;
}
}
这篇关于Hibernate抛出一个QuerySyntaxException与给定的正确的类名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!