78

JPA 中的实体映射存在以下问题。我有两个实体,第一个是查找,第二个是代表实体翻译的文本。现在我需要将 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;

所以我尝试了这个(以及其他一些变化)但没有结果。我也无法在数据库中创建连接表,我不想将 Lookup 绑定到我的 Text 类。那么有人可以告诉我是否还有其他方法吗?

4

1 回答 1

156

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

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

我使用的是 aSet而不是 a List,因为数据本身没有排序。

与 wikibook 中的示例不同,上面使用的referencedColumnName是 defaulted 。如果这不起作用,请尝试一个明确的:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;
于 2012-08-20T17:00:48.950 回答