2017-04-21 19 views
0

私はJavaEEで新しく、IntellijでJPAコンソールを使用するのに苦労しています。 JPQLクエリの実行中に多くの時間が、このエラーを取り除くために無駄:JPAコンソールでJPQLクエリを実行できませんIntellij

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] 

私はシンプルなJavaEEの永続プロジェクトとMySQLで単純なデータベースを作成しました。 DataSourceを追加し、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> 

PersonEntity.java:

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; 
    } 
} 

データベースの構造: DB structure

プロジェクトの構成: Project structure

この問題を解決するためのアイデアはありますか?

答えて

1

自分で問題を解決できるように管理しました。私のpersistense.xmlで GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost'

  • 私は、データベースのユーザーの資格情報を追加しました::

    1. は、私が実行して、MySQLデータベースにこのクエリをrootユーザーに権限を付与 <property name="hibernate.connection.username" value="dbuser"/> <property name="hibernate.connection.password" value="password"/>

    2. 私が作成しJPQLクエリをプログラムで実行するためのメインクラス:

    `

    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(); 
        } 
    }` 
    
    1. JPAコンソールのみメインメソッドの実行後を働きました。その前に私はエラーが発生しました:ユーザー '' '' localhost 'のアクセスが拒否されました。

    希望すると時間を節約できます。

  • 関連する問題