不完整的@JoinColumns

时间:2015-02-24 21:42:03

标签: java jpa

在尝试为我的数据库创建一些模型时,我遇到了JPA问题。

我有这三个类(我只是把这部分代码放在这里):

GuideVersionLang

@Entity
public class GuideVersionLang implements LangItem {
     ...
     @ManyToOne
     @JoinColumns({
          @JoinColumn(name="GUIDE_VERSION_NUMBER", referencedColumnName="VERSION_NUMBER"),
          @JoinColumn(name="GUIDE_ID", referencedColumnName="GUIDE_ID")
     })
     @JsonIgnore
     private GuideVersion guideVersion;
     ...
}

GuideVersion

@Entity
@IdClass(value=GuideVersionKey.class)
public class GuideVersion {
     ...
     @OneToMany(mappedBy="guideVersion", orphanRemoval=true, cascade=CascadeType.PERSIST)
     private LangsCollection<GuideVersionLang> guideVersionLangs;

     @Id
     @ManyToOne
     @JoinColumn(nullable = false, name="GUIDE_ID")
     @JsonIgnore
     private Guides guide;

     @Id
     @Column(name = "VERSION_NUMBER")
     private long versionNumber;
     ...
}

GuideVersionKey

@Embeddable
public class GuideVersionKey {
    private long versionNumber;
    private long guide;
    ...
}

所以,我有一个GuideVersion类,这个类有一个复合键。它的复合键由 id versionNumber 组成,两者都是长数。

我只想在GuideVersionGuideVersionLang之间建立关系,您可以在代码中看到。但是,我在@JoinColumns注释上遇到了问题:

@JoinColumns({
        @JoinColumn(name="GUIDE_VERSION_NUMBER", referencedColumnName="VERSION_NUMBER"),
        @JoinColumn(name="GUIDE_ID", referencedColumnName="GUIDE_ID")
})

我不知道为什么但是@JoinColumns不起作用。我收到此错误:

  

注释元素[field guideVersion]上的@JoinColumns来自   实体类[class com.model.GuideVersionLang]不完整。   当源实体类使用复合主键时,a   必须使用。为每个连接列指定@JoinColumn   @JoinColumns。名称和referencedColumnName元素都必须   在每个@JoinColumn中指定。

正如您在代码中看到的那样,我在@JoinColumns注释中指定了两个@Id列。我在这里缺少什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

有关相关代码的一些提示:

1.如果embeddedGuideVersion)有GuideVersionKey个ID,那么您真的不需要为它指定ID(只需使用@EmbeddedId年金)

2.您可以将Guid_id映射到@MapsId

@Entity
public class GuideVersion {
     ...

     @EmbeddedId
     GuideVersionKey IdKey;

     @ManyToOne
     @MapsId("guide")
     @JoinColumn(name = "GUIDE_ID")
     private Guides guide;

     ...
}