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 ...
最新文章
- 结合实例讲解广域网路由基本技术
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 MethodChannel 通信 )
- javascript中json格式转为字符串
- python 格式化字符串长度_python-格式化字符串
- ant external lib
- 如何在 Github 工作流文件里引用自定义实现的 action
- Eclipse 报java.lang.OutOfMemoryError: PermGen space错
- vue中的适配:px2rem
- linux c语言 udp 接收和发送数据用同一个端口_网络编程基础入门及TCP,UDP
- 局域网弱口令扫描工具_漏洞扫描软件AWVS的介绍和使用
- 01-国内开源镜像站汇总
- System.Data.SQLite 支持所有(32位、64位的资源下载包)
- win7驱动程序未经签名可以使用吗_win7系统驱动强制数字签名的问题
- 计算机网络各章节知识点总结
- 实时错误‘429’:ActiveX控件不能创建对象
- 关于Vue.js和React.js,听听国外的开发者怎么说?
- iOS开发基础之第三方调起自己的App
- 【冰点】:重庆“高烧”不退
- Micosoft Visual C++ Runtime Library Runtime Error! Program: E:\UserschenliqunAnaconda3\python.exe
- 新世纪的群众性幻想与癫狂3