在尝试为我的数据库创建一些模型时,我遇到了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 组成,两者都是长数。
我只想在GuideVersion
和GuideVersionLang
之间建立关系,您可以在代码中看到。但是,我在@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列。我在这里缺少什么?
非常感谢!
答案 0 :(得分:1)
有关相关代码的一些提示:
1.如果embedded
(GuideVersion
)有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;
...
}