2014-10-02 29 views
4

我得到了一个Eclipse错误:@EmbeddedId@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

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

回答

0

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

+0

我没有在我的orm.xml中列出PersonPK。如何将其列为嵌入式? – BnJ 2014-10-03 07:40:39

+0

如果你还没有'orm.xml'文件,你可能不需要创建一个。但是,如果你没有'orm.xml'文件,我不知道是什么原因导致了这个特定的错误。你使用的是什么版本的Eclipse?它是否添加了任何第三方扩展? – 2014-10-03 15:43:26

0

尝试在你的orm.xml

<entity-mappings> 
<entity class="package.Person"> 
<attributes> 
... 
<embedded-id name="personPK"/> 
... 
</attributes> 
</entity> 
<embeddable class="package.PersonPK"/> 
</entity-mappings> 
6

老问题,我知道,但是有过 - 和解决 - 这很问题今天上午,这里的另一种可能性:

在你的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> 
+0

正是我的问题.... thx!我想知道为什么我的应用程序在glassfish上工作... – cljk 2017-07-28 09:46:38

0

我有同样的错误。

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

不要在同一类结合@Entity和@Embeddable :)

我从PersonPK删除@Entity和所有现在是很好的与世界同步。