0
我正在使用JPA和EclipseLink(2.5.2)。JPA - 为什么使用@JoinColumn?
我有以下实体:
@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
已经实现的。
那么,它有什么意义呢?
如果没有列名称,可以说“使用FK而不是连接表”。使用列名称,指定此FK列名称而不是JPA默认列名称, –
PS您似乎忘记将“@ OneToMany”添加到“消费者”。虽然JPA提供者可能需要查看该注释(因为它可以通过自省获得该信息),但它是JPA规范的一部分,它意味着您必须指定'mappedBy'来使其具有双向性 –