Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate抛出具有给定正确类名的QuerySyntaxException_Java_Hibernate_Resteasy - Fatal编程技术网

Java Hibernate抛出具有给定正确类名的QuerySyntaxException

Java Hibernate抛出具有给定正确类名的QuerySyntaxException,java,hibernate,resteasy,Java,Hibernate,Resteasy,我有一门产品课程 @Entity public class Product { . . public Product() { } . . } 通用道 public class GenericDao<T> { private Class<T> type; @Inject protected EntityManager entityManager; public GenericDao() { }

我有一门
产品
课程

@Entity
public class Product {
    .
    .
    public Product() { }
    .
    .
}
  • 通用道

    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();
        }
    }
    
  • 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>
    
    
    org.hibernate.jpa.HibernatePersistenceProvider
    
    为避免冲突,请在实现类中指定类和实体管理器。例如:

    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();
    }
    
    公共抽象类GenericDao{
    私人课堂;
    公共通用DAO(类clazz){
    this.clazz=clazz;
    }
    公共T getById(长键){
    返回getEntityManager().find(clazz,key);
    }
    受保护的抽象EntityManager getEntityManager();
    }
    
    然后,您的实现类:

    public class ProductDao extends BaseDao<Product> { 
        @PersistenceContext
        private EntityManager em;
    
        public ProductDao(){
            super(Product.class);
        }
    
            /**
         * {@inheritDoc}
         */
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
    }
    
    公共类ProductDao扩展了BaseDao{
    @持久上下文
    私人实体管理者;
    公共产品{
    超级(产品类);
    }
    /**
    *{@inheritardoc}
    */
    @凌驾
    受保护的EntityManager getEntityManager(){
    返回em;
    }
    }
    
    尝试使用全名而不是simpleClassName

    如下

    “FROM”+type.getName()


    你的
    persistence.xml
    看起来像什么?@RobbyCornelissen我已经包括了
    persistence.xml
    config@Azola您在哪里声明类产品包含映射?我的意思是,在您的一个配置文件中,您必须指出产品(或其包)必须由持久性管理器管理。您可以在这里看到一个示例,您的
    persistence.xml
    无效。它没有opening
    properties
    标记。不,这会返回完整的类名,但包不工作?或者你使用它得到了相同的异常?我得到了ArrayIndexOutOfBoundsCeption抽象方法需要在抽象类中,但这对meIndeed有效:)该方法无论如何都应该是抽象的。我甚至建议使用通用接口和通用抽象实现。然后,您的具体类将扩展这个公共抽象实现。
    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;
        }
    }