问题:JPA JoinColumn vs mappedBy

两者的区别是什么呢

@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;...
}

回答一

mappedBy注解按道理应该用于双向关系中的父类(company类)里面的。在这种情况下,它应该用在Company类指向它子类(Branch类)的成员变量’company’

JoinColumn注解通常被用于说明映射列(用于连接一个实体关系的),这个注解可以用在任何类里面(父类和子类),但是按道理来说只能用在一类(要么是父类要么是子类),这里的例子中,我是用在了双向关系里的子类那里,去显示出子类(Branch类)里面的一个外键

下面是一个例子:
父类,Company

@Entity
public class Company {private int companyId;private String companyName;private List<Branch> branches;@Id@GeneratedValue@Column(name="COMPANY_ID")public int getCompanyId() {return companyId;}public void setCompanyId(int companyId) {this.companyId = companyId;}@Column(name="COMPANY_NAME")public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="company")public List<Branch> getBranches() {return branches;}public void setBranches(List<Branch> branches) {this.branches = branches;}}

子类,Branch

@Entity
public class Branch {private int branchId;private String branchName;private Company company;@Id@GeneratedValue@Column(name="BRANCH_ID")public int getBranchId() {return branchId;}public void setBranchId(int branchId) {this.branchId = branchId;}@Column(name="BRANCH_NAME")public String getBranchName() {return branchName;}public void setBranchName(String branchName) {this.branchName = branchName;}@ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="COMPANY_ID")public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;}}

回答二

@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;
}

文章翻译自Stack Overflow:https://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby

JPA JoinColumn vs mappedBy相关推荐

  1. java jpa @joincolumn 字段不为空_拥抱开源从表设计到 JPA 实现

    long may the sunshine. 今天的我拿起键盘就是猛敲代码. 果然,十分钟后各种 JPA 报错开始了.跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误. 于是乎 ...

  2. jpa报错:mappedBy reference an unknown target entity property:

    报错信息为: mappedBy reference an unknown target entity property: com.example.accessingdatamysql.entity.O ...

  3. Hibernate中,mappedBy和注解@JoinColumn的对比

    mappedBy 我们知道,mappedBy用于指定具有双向关系的两个实体中.哪个实体是被关联处理的.它有如下四个特点: 1.只有OneToOne,OneToMany,ManyToMany上才有map ...

  4. mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体

    只有双向的时候使用mappedBy mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体(其对应对象1) mappedBy对应实体的声明对象1 JoinColu ...

  5. SpringBoot @ManyToOne @OneToMany JoinColumn mappedBy

    实体关系 MySQL 实体模型共有三种关系,一对一,一对多,多对多,多对一是相对于一对多的. 其中当两者关系为多对多时,必将生成一张关系表,该表的外键为两个实体的ID, 当两者关系为一对多时,有两种处 ...

  6. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  7. 如何使用JPA注解标注多对多的关系

    假设应用场景如下:Teacher与Student是多对多的关系,其中,Teacher类对应teacher表如下: CREATE TABLE `teacher` (   `id` bigint(20) ...

  8. jpa删除数据后数据库无修改_java – JPA不删除数据库行

    我正面临着JPA的删除问题,这是我的代码: public deleteLine(int idLine) { Line line = em.find(Line.class,idLine); Header ...

  9. java cirteria_java – 简单的JPA CriteriaQuery的条件

    所以这是我第一次尝试使用JPA和CriteriaQuery. 我有以下(简化)实体: @Entity @Table(name = "hours") @XmlRootElement ...

最新文章

  1. Android提示框与通知的使用
  2. java.lang.VerifyError解决方案 Android
  3. 3、Docker容器操作
  4. 内嵌iframe_内嵌页面session超时,内嵌页面显示登录界面问题解决方案
  5. DotNET企业架构应用实践-系列目录
  6. 数字化转型 数字分析_数字化转型的人员问题
  7. Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL
  8. BaseAnimation
  9. HTML DOM 基础
  10. 员工因上厕所时间超长被开除了,法院:超出正常生理需求范围!
  11. vs2003远程调试总结
  12. 使用 craco 对 cra 项目进行构建优化
  13. [146]PyUserInput模拟鼠标和键盘模拟
  14. 自习室图书馆座位预约小程序 开题报告(基于微信小程序毕业设计题目选题课题)
  15. Unacceptable certificate: CN=GlobalSign Domain Validation CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE
  16. java全景图片切割 全景,基于Three.js实现360度全景图片
  17. 计算机没有开启还原的功能,win10系统无法开启系统还原功能的详细教程
  18. 巴什博弈小游戏(Java实现)
  19. java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理
  20. 超融合控制台linux重启完,深信服超融合架构平台-用户手册1.doc

热门文章

  1. gdb调试多进程程序
  2. 通过syslog接收远程日志
  3. makefile文件的书写规则(make和makefile)
  4. Ubuntu下mongodb的安装与配置
  5. Java面试2021,java黑马百度云
  6. 【微信小程序】java最简单观察者模式
  7. 知乎上已获千赞,持续更新中
  8. 约束布局constraint-layout导入失败的解决方案 - 转
  9. 灵动标签调用友情链接
  10. 什么时候用synchronized