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

标签 java jpa eclipselink

我正在将 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/

相关文章:

java - 在java中读取特定偏移量之间的字节

java - 带有 lambda 的 foreach 是否容易出现商品化错误

java - 如何测试采用 Class<T> 的方法

java - Spring Data REST Controller 不接受 JSON 参数

java - 从现有的 java gui 程序在新终端中打开 jar 文件

jpa+ejb 如何为多个请求保持实体附加(托管)?

java - 删除继承类 JPA

java - 我可以对带分隔符的文件使用 Eclipselink Moxy 编码吗?

java - 为 Eclipse juno 安装 JPA 插件

Java native SQL 查询以在输入参数为 null 时显示所有值