我在EclipseLink(2.5.2)中使用JPA。
我有以下实体:
[bins, ~, labels] = unique(A);
sums = sparse(labels, 1:numel(A), true)*B;
和
@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")
来实现。
那么,它有什么意义呢?
答案 0 :(得分:2)
没有区别,因为JPA规范中指定的映射ManyToOne的默认方式是使用连接列(例如,与连接表相对),并使用您为连接选择的名称列,并引用目标实体的ID。如果您想要一个不同的列名,或者引用另一个列,则需要注释。
JoinColumn还有许多其他属性(只需阅读the documentation),这些属性很有用,因此如果你想使用它们,则需要指定注释。