无法在JPA控制台Intellij中执行JPQL查询

无法在JPA控制台Intellij中执行JPQL查询,jpa,intellij-idea,jpql,Jpa,Intellij Idea,Jpql,我是JavaEE新手,很难在Intellij中使用JPA控制台。在执行JPQL查询时浪费了大量时间来消除此错误: jpa-ql> SELECT p FROM PersonEntity p [2017-04-21 18:44:46] using C:\Users\admin\.IntelliJIdea2017.1\system\compiler\jpaproject4.0.82b748b3\.generated\Jpa_Console\JpaProject4.0-PU-14927894866

我是JavaEE新手,很难在Intellij中使用JPA控制台。在执行JPQL查询时浪费了大量时间来消除此错误:

jpa-ql> SELECT p FROM PersonEntity p
[2017-04-21 18:44:46] using C:\Users\admin\.IntelliJIdea2017.1\system\compiler\jpaproject4.0.82b748b3\.generated\Jpa_Console\JpaProject4.0-PU-1492789486636\META-INF\persistence.xml
[2017-04-21 18:44:48] PersonEntity is not mapped [SELECT p FROM PersonEntity p]
我在MySQL中创建了简单的JavaEE持久化项目和简单数据库。 我在Intellij中添加了数据源并生成了持久性映射。 我导入了必要的库并消除了所有编译错误。 我可以在数据库工具窗口中看到我的数据库,并可以执行SQL查询。 但由于这个恼人的错误,我无法执行JPQL查询:PersonEntity没有映射

persistence.xml:

<persistence-unit name="NewPersistenceUnit">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>models.PersonEntity</class>
    <properties>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/sample"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.connection.username" value=""/>
        <property name="hibernate.connection.password" value=""/>
        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

数据库结构:

项目结构:


有什么办法解决这个问题吗?

我自己设法解决了这个问题

  • 我通过执行以下查询向MySQL数据库中的root用户授予了权限:
    授予*上的所有权限*到“根”@“本地主机”

  • 在我的persistense.xml中,我添加了数据库用户凭据:
    
    

  • 我创建了用于以编程方式执行JPQL查询的主类:

  • `

    import models.personetity;
    导入org.hibernate.jpa.HibernatePersistenceProvider;
    导入javax.persistence.EntityManager;
    导入javax.persistence.EntityManagerFactory;
    导入javax.persistence.spi.PersistenceProvider;
    导入java.util.HashMap;
    导入java.util.List;
    公共类应用程序{
    public static final String QUERY=“从PersonEntity p中选择p”;
    公共静态void main(字符串[]args){
    PersistenceProvider PersistenceProvider=新的HibernatePersistenceProvider();
    EntityManagerFactory=persistenceProvider.createEntityManagerFactory(“NewPersistenceUnit”,newHashMap());
    EntityManager em=factory.createEntityManager();
    List resultList=em.createQuery(QUERY,PersonEntity.class).getResultList();
    System.out.println(结果列表);
    em.close();
    }
    }`
    
  • JPA控制台仅在主方法执行后工作。在此之前,我收到一个错误:用户“@'localhost”的访问被拒绝
  • 希望它能帮你节省时间

    package models;
    
    
    import javax.persistence.*;
    
    @Entity
    @Table(name = "person", schema = "sample", catalog = "")
    public class PersonEntity {
        private int id;
        private String name;
    
        @Id
        @Column(name = "id")
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        @Basic
        @Column(name = "name")
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            PersonEntity that = (PersonEntity) o;
    
            if (id != that.id) return false;
            if (name != null ? !name.equals(that.name) : that.name != null) return false;
    
            return true;
        }
    
        @Override
        public int hashCode() {
            int result = id;
            result = 31 * result + (name != null ? name.hashCode() : 0);
            return result;
        }
    }
    
    import models.PersonEntity;
    import org.hibernate.jpa.HibernatePersistenceProvider;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.spi.PersistenceProvider;
    import java.util.HashMap;
    import java.util.List;
    
    public class App {
        public static final String QUERY = "SELECT p FROM PersonEntity p";
        public static void main(String[] args) {
            PersistenceProvider persistenceProvider = new HibernatePersistenceProvider();
            EntityManagerFactory factory = persistenceProvider.createEntityManagerFactory("NewPersistenceUnit", new HashMap());
            EntityManager em = factory.createEntityManager();
            List<PersonEntity> resultList = em.createQuery(QUERY, PersonEntity.class).getResultList();
            System.out.println(resultList);
            em.close();
        }
    }`