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'來使其具有雙向性 –