如何在JPA中定义单向一对多关系

2022-08-31 12:43:44

我在JPA中的实体映射方面遇到了以下问题。我有两个实体,第一个是查找,第二个是文本,它代表实体的翻译。现在我需要将查找绑定到文本,但我不希望文本引用查找。为了使此操作更加复杂,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 类。那么,任何人都可以告诉我是否有其他方法吗?


答案 1

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

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

我使用了 a 而不是 a,因为数据本身不是有序的。SetList

上面使用的是默认的,与维基教科书中的例子不同。如果这不起作用,请尝试显式方法:referencedColumnName

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

答案 2

推荐