@EmbeddedId:未映射为可嵌入

时间:2014-10-02 14:24:38

标签: eclipse jpa

我收到了一个Eclipse错误:@EmbeddedId

这是实体:

@Entity
@Table(name = "PERSON")
public class Person implements Serializable {

    @EmbeddedId
    private PersonPK PersonPK;

    @Column(name = "AGE")
    private int age;
}

可嵌入的课程:

@Embeddable
public class PersonPK implements Serializable {

    @Column(name = "FIRSTNAME")
    private String firstName;

    @Column(name = "LASTNAME")
    private String lastName;

    public PersonPK() {
    }
}

Eclipse向我显示了这个错误:PersonPK is not mapped as an embeddable

你能告诉我为什么以及如何解决这个问题吗?

5 个答案:

答案 0 :(得分:8)

老问题,我知道,但今天早上已经 - 并解决了 - 这个问题,这是另一种可能性:

在persistence.xml文件中,如果exclude-unlisted-classes设置为true,则需要在持久性单元中将@Embeddable类列为托管类。所以在上面的例子中,你会做这样的事情:

<persistence-unit name="default" transaction-type="JTA">
    <!-- ..... -->
    <class>com.example.foobar.Person</class>
    <class>com.example.foobar.PersonPK</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <!-- ..... -->
</persistence-unit>

答案 1 :(得分:0)

可能PersonPKEntity文件中列为orm.xmlorm.xml文件中的设置会覆盖Java注释。从PersonPK文件中删除orm.xml(或将其列为Embeddable),错误将消失。

答案 2 :(得分:0)

orm.xml

中尝试以下操作
<entity-mappings> 
<entity class="package.Person"> 
<attributes> 
... 
<embedded-id name="personPK"/> 
... 
</attributes> 
</entity> 
<embeddable class="package.PersonPK"/> 
</entity-mappings>

答案 3 :(得分:0)

您还可以禁用构建的JPA验证。

右键单击项目并选择属性。选择验证并选中启用项目特定设置。取消选中JPA Validator。清理项目。

来源:Problem with JPA Project in Eclipse - error in class annotated @Entity: Table "xxx" cannot be resolved

答案 4 :(得分:0)

我遇到了同样的错误。

在我的情况下,我在PersonPK(Embeddable类)上有一个@Entity注释。

不要在同一个班级上结合@Entity和@Embeddable:)

我从PersonPK中删除了@Entity,现在所有人都对这个世界很好。