尝试为数据库创建一些模型时,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
类,该类具有复合键。它的复合键由Guide的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来自
实体类别[类别com.model.GuideVersionLang]不完整。
当源实体类使用复合主键时,
必须为每个连接列指定@JoinColumn
@JoinColumns。名称和referencedColumnName元素都必须
在每个这样的@JoinColumn中指定。
如您在代码中看到的,我在@JoinColumns批注内指定了两个@Id列。我在这里想念什么?
非常感谢你!
最佳答案
有关所讨论代码的一些技巧:
1.因为您有embedded
(GuideVersion
)的GuideVersionKey
id,所以您实际上不需要为其指定ID(只需使用@EmbeddedId
注释)。
2.您可以使用@MapsId
映射Guid_id。
@Entity
public class GuideVersion {
...
@EmbeddedId
GuideVersionKey IdKey;
@ManyToOne
@MapsId("guide")
@JoinColumn(name = "GUIDE_ID")
private Guides guide;
...
}