[英]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.