繁体   English   中英

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

[英]How to define unidirectional OneToMany relationship in JPA

JPA 中的实体映射存在以下问题。 我有两个实体,第一个是 Lookup,第二个是代表实体翻译的 Text。 现在我需要将 Lookup 绑定到 Text,但我不希望 Text 引用 Lookup。 为了使这更复杂,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;

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

我的 JPA 工作圣经是Java Persistence wikibook 它有一个关于单向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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM