我使用JPA和java作为技术并编写非常简单的Web应用程序。 有一个名为Employee的类,如下面的代码
@Entity
@Table(name="Employee")
public class Employee{
@Id
private int id;
@Column(name="name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
一个名为Employee的表存在于数据库中。 它的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="JPAService" transaction-type="RESOURCE_LOCAL">
<!-- Persistence provider -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- Entity classes -->
<class>com.solution.domain.Employee</class>
<properties>
<!-- The JDBC driver of your database -->
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<!-- The JDBC URL to the database instance -->
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test" />
<!-- The database username -->
<property name="javax.persistence.jdbc.user" value="postgres" />
<!-- The database password -->
<property name="javax.persistence.jdbc.password" value="postgres"/>
<property name="javax.persistence.jdbc.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
</properties>
</persistence-unit>
</persistence>
此xml文件中存在Employee类条目。
启动应用程序时没有问题。每件事都很好。 但是当执行查询时它会抛出异常 &#34;员工未映射[从员工e中选择e]&#34;
EntityManager em = getEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("select e from Employee e");
List<Employee> employees = query.getResultList();
if(employees != null){
return employees.get(0);
}
em.getTransaction().commit();
我无法理解缺少映射的位置。正如我已经提到过它的一个网络项目。所以为了更清楚,我附上了我的项目的一个屏幕截图。
提前致谢。
答案 0 :(得分:1)
我遇到了问题。这是一个愚蠢的错误。我正在使用JPA,但在Employee类中,我使用了来自hibernate实现的Entity注释而不是JPA包。
答案 1 :(得分:-1)
附注:使用JPA对数据库建模是个坏主意,例如,通过在数据模型中实现整数代理键。 JPA应该有助于持久化对象模型,该模型将使用自然的&#34;密钥&#34;区分对象。 JPA实体应该只公开对象模型的属性。这有利于大大简化关系的表达,因为您关联的是对象,而不是ID字段。不要使用JPA进行数据库转换,将其用于对象持久性。