我在JPA中的实体映射存在以下问题。我有两个实体,第一个是Lookup,第二个是Text,它代表实体的翻译。现在我需要将Lookup绑定到Text但我不希望Text引用Lookup。为了使这更复杂,Text不会在此关系中使用其主键,而是在TXTHEAD_CODE
列中定义的元代码。
Lookup.java
@Entity
@Table(name = "DATREG")
public class Lookup implements PersistableEntity {
@Id
@Column(name = "DATREG_META_CODE")
private String metaCode;
@OneToMany
@JoinTable(name="TXT",
joinColumns=@JoinColumn(name="DATREG_META_CODE", referencedColumnName="TXTHEAD_CODE"),
inverseJoinColumns=@JoinColumn(name="DATREG_META_CODE"))
private List<Text> text;
Text.java
@Entity
@Table(name = "TXT")
public class Text {
@Id
@Column(name = "TXT_ID")
private Long id;
@Column(name = "TXTHEAD_CODE")
private String code;
所以我尝试了这个(以及其他一些变化),但没有结果。我也无法在数据库中创建连接表,我不希望绑定查找到我的Text类。那么有人可以告诉我是否有其他方式?
答案 0 :(得分:121)
我对JPA工作的圣经是Java Persistence wikibook。它有一个section on unidirectional OneToMany
,它解释了如何使用@JoinColumn
注释执行此操作。在你的情况下,我想你会想要:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;
我使用的是Set
而不是List
,因为数据本身并未订购。
以上是使用默认的referencedColumnName
,与wikibook中的示例不同。如果这不起作用,请尝试一个明确的:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;