JPA JoinColumn vs mappedBy
问题: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相关推荐
- java jpa @joincolumn 字段不为空_拥抱开源从表设计到 JPA 实现
long may the sunshine. 今天的我拿起键盘就是猛敲代码. 果然,十分钟后各种 JPA 报错开始了.跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误. 于是乎 ...
- jpa报错:mappedBy reference an unknown target entity property:
报错信息为: mappedBy reference an unknown target entity property: com.example.accessingdatamysql.entity.O ...
- Hibernate中,mappedBy和注解@JoinColumn的对比
mappedBy 我们知道,mappedBy用于指定具有双向关系的两个实体中.哪个实体是被关联处理的.它有如下四个特点: 1.只有OneToOne,OneToMany,ManyToMany上才有map ...
- mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体
只有双向的时候使用mappedBy mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体(其对应对象1) mappedBy对应实体的声明对象1 JoinColu ...
- SpringBoot @ManyToOne @OneToMany JoinColumn mappedBy
实体关系 MySQL 实体模型共有三种关系,一对一,一对多,多对多,多对一是相对于一对多的. 其中当两者关系为多对多时,必将生成一张关系表,该表的外键为两个实体的ID, 当两者关系为一对多时,有两种处 ...
- Spring Hibernate JPA 联表查询 复杂查询
(转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...
- 如何使用JPA注解标注多对多的关系
假设应用场景如下:Teacher与Student是多对多的关系,其中,Teacher类对应teacher表如下: CREATE TABLE `teacher` ( `id` bigint(20) ...
- jpa删除数据后数据库无修改_java – JPA不删除数据库行
我正面临着JPA的删除问题,这是我的代码: public deleteLine(int idLine) { Line line = em.find(Line.class,idLine); Header ...
- java cirteria_java – 简单的JPA CriteriaQuery的条件
所以这是我第一次尝试使用JPA和CriteriaQuery. 我有以下(简化)实体: @Entity @Table(name = "hours") @XmlRootElement ...
最新文章
- Android提示框与通知的使用
- java.lang.VerifyError解决方案 Android
- 3、Docker容器操作
- 内嵌iframe_内嵌页面session超时,内嵌页面显示登录界面问题解决方案
- DotNET企业架构应用实践-系列目录
- 数字化转型 数字分析_数字化转型的人员问题
- Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL
- BaseAnimation
- HTML DOM 基础
- 员工因上厕所时间超长被开除了,法院:超出正常生理需求范围!
- vs2003远程调试总结
- 使用 craco 对 cra 项目进行构建优化
- [146]PyUserInput模拟鼠标和键盘模拟
- 自习室图书馆座位预约小程序 开题报告(基于微信小程序毕业设计题目选题课题)
- Unacceptable certificate: CN=GlobalSign Domain Validation CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE
- java全景图片切割 全景,基于Three.js实现360度全景图片
- 计算机没有开启还原的功能,win10系统无法开启系统还原功能的详细教程
- 巴什博弈小游戏(Java实现)
- java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理
- 超融合控制台linux重启完,深信服超融合架构平台-用户手册1.doc