我创建了一个JPA项目。在那个Eclipse中,在实体类上显示以下错误。
类“model.Address”列在persistence.xml文件中但未映射
我应该如何在persistance.xml
中映射实体类?
以下是model.Address
实体:
package model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
public class Address implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
private String city;
private String country;
private String province;
private String postalCode;
private String street;
// Getters/setters omitted for brevity.
}
以下是persistence.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<persistence
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"
version="2.0"
>
<provider>org.eclipse.persistance.example.jpa.20.employee.annotations</provider>
<persistence-unit name="employee" transaction-type="RESOURCE_LOCAL">
<class>model.Employee</class>
<class>model.Address</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="javax.persistence.jdbc.user" value="scott" />
<property name="javax.persistence.jdbc.password" value="tiger" />
</properties>
</persistence-unit>
</persistence>
答案 0 :(得分:101)
这是一个Eclipse的怪癖。我最近在创建一个禁用了JPA库配置的新JPA项目时出现了这个问题,但是在之前没有手动配置JPA库我通过Eclipse New JPA Entity创建了实体向导。创建实体后,我在项目的构建路径中配置了JPA库(只需在库中添加目标Java EE服务器运行时),但验证错误仍然存在。我可以通过以下至少一种方式解决它:
persistence.xml
文件, JPA工具 - &gt; 同步班级列表。这是一贯可重复的。我使用的是Eclipse Indigo SR1。当我在配置JPA库之后创建实体时,不会发生此验证错误。
答案 1 :(得分:9)
右键点击jpa项目
然后
答案 2 :(得分:6)
我认为你有错误的JPA提供程序类。它必须是:
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
(你设置的那个似乎根本不是一个类,更不用说提供者类了)
答案 3 :(得分:5)
确保您的班级使用@Entity进行注释 (来自javax.persistence.Entity)
我意识到这不是OP的问题,但是我被抓住了,谷歌把我送到了这里。
答案 4 :(得分:3)
您需要为JPA创建持久性文件和ORM映射文件,从持久性文件中引用映射文件。
<persistence-unit name="persistenceUnit"
transaction-type="RESOURCE_LOCAL">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<mapping-file>META-INF/hbase-orm.xml</mapping-file>
<class>com.xxx.logcollector.entity.DefaultLogableEntity</class>
<properties>
<property name="datanucleus.jpa.addClassTransformer" value="false" />
<property name="datanucleus.managedRuntime" value="false" />
...
创建ORM映射文件
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<entity class="com.xxx.cne.logcollector.entity.DefaultLogableEntity"
name="DefaultLogableEntity">
<table name="RAW_LOG_COLLECTION" />
<attributes>
<id name="clientHostIP">
<column name="ANALYTICS:CLIENT_IP" />
</id>
<basic name="requestDateTime">
<column name="ANALYTICS:REQUEST_DATETIME" />
</basic>
...
在春天创建实体经理
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceUnit"></property>
答案 5 :(得分:3)
如果使用eclipse,请转到Window>Preference>Validation
并取消选中Suspend all validators
选项。清除项目并解决问题。
答案 6 :(得分:3)
以上任何一项都没有用。
对于在Eclipse或RAD中搜索“类xxxx已映射但未包含在任何持久性单元中”错误的任何人:
这些步骤对我有用。
答案 7 :(得分:2)
应该写成:
@Entity
**@Table(name="Address",schema="ABCD")** `
......或者它可以写成:
@Entity
public class Address {
}
答案 8 :(得分:2)
我得到了类似的错误,当错过eclipse artifacts文件夹“.settings”时。 在使用“maven-eclipse-plugin”生成eclipse工件后,错误消失了