类"model.Address"在persistence.xml文件中列出,但未映射。

33

我创建了一个 JPA 项目,但在实体类中,Eclipse 显示以下错误:

persistence.xml 文件中列出了 "model.Address" 类,但没有映射

我应该如何将实体类映射到 persistence.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>

首先 - 请通过显示您的映射文件来展示给我们。说实话 - 如果我们除了一个错误信息什么也不知道,您认为我们怎么能“调试”问题呢? - Bozho
好的,提出问题是一件好事,但我仍然想看到你的 persistence.xml - Bozho
9个回答

123

这是Eclipse的一个小问题。最近我创建了一个新的JPA项目,但禁用了JPA库配置,在使用Eclipse的New JPA Entity向导创建实体之前,没有手动配置JPA库。在创建实体后,我在项目的构建路径中配置了JPA库(只需在Libraries中添加目标Java EE服务器运行时),但仍然存在验证错误。我可以通过以下至少一种方式解决它:

  1. 右键单击persistence.xml文件,选择JPA Tools -> Synchronize Class List
  2. 或者,右键单击项目,选择Validate
  3. 或者,关闭/重新打开项目。

这个问题很容易重现。我使用的是Eclipse Indigo SR1。如果我在配置JPA库之后创建实体,就不会出现此验证错误。


哇,奇怪的问题。在使用_JPA工具->同步类列表_后,<persistence-unit>块内的相关类被删除了。虽然这些验证错误已经消失了,但我想知道这是否正常... - informatik01
非常感谢您提供的友善信息 @BalusC - naib khan
我确认@BalusC的陈述 - 这是在2019年一直可以重现、复制和应用的解决方案,完美运作!▲ - lupchiazoem
右键项目,验证 - 看起来最简单。这对我有效。 - Pramod Sharma
@BalusC 是一个神! - JGlass
问题解决了,谢谢! - undefined

11

右键点击 JPA 项目

然后

在此输入图像描述


6

我认为您使用了错误的JPA提供程序类。正确的类应该是:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

您设置的那个似乎根本不是一个类,更不用说是提供程序类了。


5

请确保您的类使用@Entity进行注释(来自javax.persistence.Entity)。

我知道这不是OP的问题,但我曾经也因为这个被困扰过,然后谷歌把我带到了这里。


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>

在Spring中创建实体管理器

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit"></property>


3
如果使用eclipse,可以前往Window>Preference>Validation,取消选中Suspend all validators选项。清理项目后,问题将得到解决。

由于这个问题非常老,你的答案可能不会被接受。 - hakre

3

以上任何方法都没有起作用。

对于在Eclipse或RAD中搜索“Class xxxx is mapped, but is not included in any persistence unit”错误的人:

  1. 右键单击项目,选择属性。
  2. 选择JPA
  3. 选择单选按钮“自动发现注释类”
  4. 点击OK并等待项目完成构建。

这些步骤对我有效。


2
应该这样写:

它应该被写成:

@Entity
**@Table(name="Address",schema="ABCD")** `

...或者可以写成:

@Entity
public class Address {

} 

2
我遇到了类似的错误,当我缺少eclipse工件文件夹“.settings”时。使用“maven-eclipse-plugin”生成eclipse工件后,错误消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接