如何在JPA中定义单向的OneToMany关系

我在JPA中有一个与实体映射有关的问题。 我有两个实体,第一个是Lookup,第二个是Text,表示实体的翻译。 现在我需要将查找绑定到文本,但我不希望文本引用查找。 为了使这变得更加复杂,Text在这个关系中不使用它的主键,而是在TXTHEAD_CODE列中定义的元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; 

所以我已经尝试了这个(和其他几个变化),但没有结果。 我也不能在数据库中创build连接表,我不想绑定到我的文本类的查找。 那么谁能告诉我是否有其他方法?

我的JPA工作的圣经是Java Persistence wikibook 。 它有一个关于单向的OneToMany的部分,它解释了如何使用@JoinColumn注解来做到这一点。 在你的情况下,我想你会想要:

 @OneToMany @JoinColumn(name="TXTHEAD_CODE") private Set<Text> text; 

我已经使用了一个Set而不是List ,因为数据本身没有sorting。

以上是使用默认referencedColumnName ,不像在wikibook的例子。 如果这不起作用,请尝试一个明确的:

 @OneToMany @JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE") private Set<Text> text;