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

Pet*_*sik 63 java jpa jpa-2.0

我在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;
Run Code Online (Sandbox Code Playgroud)

Text.java

@Entity
@Table(name = "TXT")
public class Text {

    @Id
    @Column(name = "TXT_ID")
    private Long id;

    @Column(name = "TXTHEAD_CODE")
    private String code;
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*son 124

我为JPA工作的圣经是Java Persistence wikibook.它有一个单向部分OneToMany,解释了如何使用@JoinColumn注释执行此操作.在你的情况下,我认为你会想要:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;
Run Code Online (Sandbox Code Playgroud)

我使用的是a Set而不是a List,因为数据本身并没有被排序.

以上是使用默认值referencedColumnName,与wikibook中的示例不同.如果这不起作用,请尝试一个明确的:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;
Run Code Online (Sandbox Code Playgroud)

  • 答对了!这个“Java Persistence Wikibook”链接是我一直在寻找的……感谢分享…… (3认同)