无法在 JPA 控制台 Intellij 中执行 JPQL 查询
Cannot execute JPQL query in JPA console Intellij
我是 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 Persistence 项目和简单的数据库。
我在 Intellij 中添加了 DataSource 并生成了持久性映射。
我导入了必要的库并消除了所有编译错误。
我可以在数据库工具 window 中看到我的数据库,并且可以执行 SQL 查询。
但是由于这个烦人的错误,我无法执行 JPQL 查询:PersonEntity is not mapped。
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
有解决此问题的想法吗?
自己设法解决了问题。
我通过执行以下查询向 MySQL 数据库中的 root 用户授予权限:
GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost'
在我的 persistense.xml 中,我添加了数据库用户凭据:
<property name="hibernate.connection.username" value="dbuser"/>
<property name="hibernate.connection.password" value="password"/>
我创建了 main class 用于以编程方式执行 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();
}
}`
- JPA 控制台工作仅在执行主要方法之后。在此之前我收到一个错误:用户 ''@'localhost'.
的访问被拒绝
希望它能帮助您节省时间!
我是 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 Persistence 项目和简单的数据库。 我在 Intellij 中添加了 DataSource 并生成了持久性映射。 我导入了必要的库并消除了所有编译错误。 我可以在数据库工具 window 中看到我的数据库,并且可以执行 SQL 查询。 但是由于这个烦人的错误,我无法执行 JPQL 查询:PersonEntity is not mapped。
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
有解决此问题的想法吗?
自己设法解决了问题。
我通过执行以下查询向 MySQL 数据库中的 root 用户授予权限:
GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost'
在我的 persistense.xml 中,我添加了数据库用户凭据:
<property name="hibernate.connection.username" value="dbuser"/> <property name="hibernate.connection.password" value="password"/>
我创建了 main class 用于以编程方式执行 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();
}
}`
- JPA 控制台工作仅在执行主要方法之后。在此之前我收到一个错误:用户 ''@'localhost'. 的访问被拒绝
希望它能帮助您节省时间!