2012-03-14 79 views
7

我的代码有问题(很明显),并且在互联网上进行了很多搜索之后,我没有找到我的问题的答案,所以我在这里问我的问题。 我有这样的:JPA - EmbeddedId with @ManytoOne

@Entity 
public class Resident 
{ 
    /** Attributes */ 
    @EmbeddedId 
    private IdResident idResident; 
    ... 

@Embeddable 
public class IdResident { 
    @Column(name="NOM") 
    private String nom; 
    @ManyToOne 
    @JoinColumn(name="CODE") 
    private Port port; 
    ... 

@Entity 
public class Port 
{ 
    /** Attributes */ 
    @Id 
    @Column(name="CODE") 
    private String code; 
    @Column(name="NOM") 
    private String nom; 
    ... 

而且我使用Maven,我在我的persistence.xml这样写:

<class>beans.Port</class> 
<class>beans.Resident</class> 

但是当我运行该程序,不管是什么,我写,我有这样的:

Exception Description: The mapping [port] from the embedded ID class 
[class beans.IdResident] is an invalid mapping for this class. An embeddable class that 
is used with an embedded ID specification (attribute [idResident] from the source 
[class beans.Resident]) can only contain basic mappings. Either remove the non 
basic mapping or change the embedded ID specification on the source to be embedded. 

我看不出哪里是我的错误,我想这是因为IdResident类至极的中有一个实体对象,但我不知道该怎么FIW它

回答

5

您得到的错误消息解释得相当好,嵌入式用作嵌入式ID只能包含基本映射,而不能包含关系。在JPA 2.0规范中,用以下词语来说明:

支持在嵌入式id类中定义的关系映射不是 。

只要定义是在嵌入复合的ID被用作嵌入ID的一部分的属性,并在实体本身地图关系(或以另一种可嵌入和包括与@Embedded映射)。

0

在我看来,这是基于IdResident类中的ManyToOne映射导致错误消息将我推向这个方向。