java - JPA JoinColumn 与mappedBy

标签 java hibernate jpa orm

有什么区别:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
    private List<Branch> branches;
    ...
}

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, 
    mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}

最佳答案

注解@JoinColumn表示该实体是关系的所有者(即:对应的表有一列带有被引用表的外键) ,而属性 mappedBy 表示这一方的实体是关系的反面,所有者位于“另一方”实体中。这也意味着您可以从用“mappedBy”(完全双向关系)注释的类访问另一个表。

特别是,对于问题中的代码,正确的注释如下所示:

@Entity
public class Company {
    @OneToMany(mappedBy = "company",
               orphanRemoval = true,
               fetch = FetchType.LAZY,
               cascade = CascadeType.ALL)
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}

关于java - JPA JoinColumn 与mappedBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953800/

相关文章:

java - Hibernate映射异常

java - Spring - 使用@Service和@Repository注释同一个类

java - @ManyToOne 错误 - JPA/Hibernate 分离实体传递到持久化

java - 是否可以通过 JPA 和 CriteriaBuilder 的复合键进行排序

java - 在循环的每次迭代中重新分配变量会影响性能吗?

java - 模拟器崩溃,java.lang.OutOfMemoryError

java - org.hibernate.dialect.PostgresPlusDialect 与 org.hibernate.dialect.PostgreSQL9Dialect 之间有什么区别?

java - 改变 jFreeChart 的背景颜色

java - HSQLDB 和 Hibernate/JPA - 不持久化到磁盘?

mysql - Jpa ManyToMany 关系不起作用