繁体   English   中英

JPA-为什么使用@JoinColumn?

[英]JPA - Why use @JoinColumn?

我将JPA与EclipseLink(2.5.2)结合使用。

我有以下实体:

@Entity
@Table(name="Consumer")
public class Consumer implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "PRODUCER_ID")
    private Producer producer;

    public Consumer() {
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Producer  getProducer() {
        return producer;
    }

    public void setProducer(Producer consumesFrom) {
        this.producer = consumesFrom;
    }




}

@Entity
@Table(name="Producer")
public class Producer implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer Id;
    private String dataType;

    private List<Consumer> consumers = new ArrayList<>();


    public Producer() {
    }

    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        this.Id = id;
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }


}

消费者的坚持:

   consumer.setProducer(producer); 
   entityManager.persist(consumer);

如果删除@JoinColumn(name = "PRODUCER_ID") ,则预期结果几乎没有区别。 因此,我试图弄清楚它的真正用途是什么。

我已经在Internet上阅读了各种示例,我了解它的目的是定义用于连接两个表的列,但这已经通过@ManyToOne实现。

那么,这有什么意义呢?

没什么区别,因为在JPA规范中指定的映射ManyToOne的默认方式是使用联接列(例如,与联接表相对),并使用为联接列选择的名称,并且引用目标实体的ID。 如果要使用其他列名或引用其他列,则必须使用注释。

JoinColumn还具有许多其他有用的属性(只需阅读文档 ),因此如果要使用它们,则需要指定注释。

暂无
暂无

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

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