gpt4 book ai didi

java - JPA - 为什么使用@JoinColumn?

转载 作者:行者123 更新时间:2023-12-01 20:16:46 25 4
gpt4 key购买 nike

我正在将 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"),预期结果实际上没有区别。所以我想弄清楚它的真正用途是什么。

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

那么,这有什么意义呢?

最佳答案

没有区别,因为 JPA 规范中指定的映射 ManyToOne 的默认方式是使用联接列(例如,与联接表相反),并使用您为联接选择的名称列,并引用目标实体的 ID。如果您想要不同的列名称,或者引用另一列,则需要注释。

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

关于java - JPA - 为什么使用@JoinColumn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com