下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常

问题类:一对多、一对一、多对多
============一对多
一方的设置
@OneToMany(mappedBy="ask",cascade={CascadeType.REMOVE})
@LazyCollection(LazyCollectionOption.FALSE)
@OrderBy(value="id desc")
public Set<ScAskAnswer> getAnswers() {
return answers;
}
多方的设置
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ASK_ID")
public ScAsk getAsk() {
return ask;
}
===========一对一
一方
@OneToOne(cascade={CascadeType.REMOVE,CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name="TEXT_ID")
public ScText getText() {
return text;
}
另一方没有单独的设置
============= 仿照案例分析二
USER类——下面每一组的上半部分代码都是user用户类的
====================第一组
一方
@OneToMany(fetch=FetchType.LAZY,cascade = { CascadeType.REMOVE }, mappedBy="cmsUser")
public List<CmsMsgInfo> getCmsInfos() {
return cmsInfos;
}
多方
@ManyToOne
@JoinColumn( name = "userId" )
private User cmsUser; 说明:网上搜索资料:如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中 ;如果是LAZY,那么取出这条数据时,它关联的数据并不取出来。
在jpa中jpa默认的加载方式是lazy方式也就是在实际使用到数据的时候才加 载相关数据,使用lazy时可以不用显示注明fetch=FetchType.LAZY
====================第二组
一方
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "user")
@JsonIgnore
@OrderBy("roleIndex")
public List<UserRole> getUserRoles() {
return userRoles;
}
多方
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "f_user_id", nullable = false)
public User getUser() {
return this.user;
} ====================第三组
一方
@OneToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL },mappedBy="user")
public CmsUserCompany getCmsUserCompany() {
return cmsUserCompany;
}
一方
@MapsId
@OneToOne
@JoinColumn(name="userid")
public User getUser() {
return user;
} ====================第四组 @ManyToMany
@JoinTable(
name="cms_domain_user"
, joinColumns={
@JoinColumn(name="userid")
}
, inverseJoinColumns={
@JoinColumn(name="id")
}
)
public List<CmsDomain> getCmsDomains() {
return cmsDomains;
} @ManyToMany(mappedBy="cmsDomains")
@JsonIgnore
private List<User> cmsUsers; ====================第五组 @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "user")
@JsonIgnore
@OrderBy("groupIndex")
public List<UserMemberGroup> getUserGroups() {
return userGroups;
} @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "f_user_id", nullable = false)
public User getUser() {
return user;
} ====================第六组 @ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name="cms_user_project_relation"
, joinColumns={
@JoinColumn(name="userid")
}
, inverseJoinColumns={
@JoinColumn(name="projectid")
}
)
public List<CmsProject> getCmsProjects() {
return cmsProjects;
} @ManyToMany( mappedBy = "cmsProjects" )
public List<User> getUser() {
return user;
} ====================第七组 @OneToMany(mappedBy="user",cascade = CascadeType.ALL,orphanRemoval = true)
@JsonIgnore
public List<CmsUserProjectRelation> getCmsUserProjectRelations() {
return cmsUserProjectRelations;
} @ManyToOne
@JoinColumn(name="userid",insertable = false, updatable = false)
private User user; 网上资料:
当使用JPA配置实体时,如果有两个属性(一个是一般属性,一个是多对一的属性)映射到数据库的同一列,就会报错。
这时,在多对一的@JoinColumn注解中添加insertable = false, updatable = false就能解决。
1. /**
2. * 用户类
3. */
4. @Entity
5. @Table(name = "TBL_SYS_USER")
6. public class SysUser{
7. @Id
8. @GeneratedValue(generator = "system-uuid")
9. @GenericGenerator(name = "system-uuid", strategy = "uuid")
10. @Column(name = "USER_ID", unique = true, length = 40)
11. @CsvColumn(imported=false)
12. private String id; //用户ID
13.
14. @Column(name = "USER_CODE", nullable = false, length = 40)
15. private String userCode; //用户账号
16.
17. @CsvColumn(desc="用户姓名", required= true )
18. @Column(name = "USER_NAME", length = 60)
19. private String userName; //用户姓名
20.
21. @Column(name = "DEPT_ID", length = 40)
22. private String deptId; //部门ID(IS_ORG=0的)
23.
24. @ManyToOne
25. @JoinColumn(name = "DEPT_ID", insertable = false, updatable = false, nullable=true)
26. private SysOrg dept; //部门对象
27.
28. }
我们可以看到,deptId和dept都映射到数据库里面的DEPT_ID字段,但是加上了insertable = false, updatable = false后,在保存数据时,dept不会被保存到数据库。

JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用的更多相关文章

  1. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  2. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  3. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  4. 使用NHibernate(7)-- 一对一 && 一对多 && 多对多

    1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...

  5. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  6. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...

  7. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置

    1.Mybatis多表查询1.1 一对一查询1.1.1 一对一查询的模型用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的 ...

  8. MySQL一对一:一对多:多对多: 实例!!!!

    学生表和课程表可以多对多 一个学生可以学多门课程 一门课程可以有多个学生: 多对多 *** 一个学生对应一个班级 一个班级对应多个学生: 一对多 *** 一个老师对应多个学生 多个学生对应一个老师:一 ...

  9. SQLAlchemy_定义(一对一/一对多/多对多)关系

    目录 Basic Relationship Patterns One To Many One To One Many To Many Basic Relationship Patterns 基本关系模 ...

随机推荐

  1. Javase、Javaee、Javame的区别

    /*简而言之,javase是基础,要先学,javaee是企业级,接着学,然后可以转到javaweb方向,javame是做移动应用的.基础必须先学,然后再考虑下一步*/ Java 平台有三个版本,这使软 ...

  2. Java的历史及发展

    Java之父:詹姆斯·高斯林 (James Gosling) Java自1995诞生,至今已经20多年的历史. Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名.Java语 ...

  3. Python学习札记(九) Basic6 dict and set

    参考:dict and set Note: A.dict Hint:注意最后三点. 1.Python内置字典dict,全称directory,在别的语言如C++中称为map,使用键值-value存储, ...

  4. 在HTTP通讯过程中,是客户端还是服务端主动断开连接?

    比如说:IE访问IIS,获取文件,肯定是要建立一个连接,这个连接在完成通讯后,是客户端Close了连接,还是服务端Close了连接.我用程序测模拟IE和IIS,都没有收到断开连接的消息,也就是都没有触 ...

  5. SSH两种验证方式原理

    本帖转自 http://www.cnblogs.com/hukey/p/6248468.html SSH验证方式有两种,分别为用户密码认证以及密钥认证. 1.用户密码认证方式 说明: (1) 当客户端 ...

  6. [spring mvc]Hello World入门

    1.新建项目 File->New->Other,选择Dynamic web project: 项目建好之后,目录结构如下: 2.WEB-INF/web.xml 中配置 dispatcher ...

  7. mongodb安装、运行

    1.下载安装: 切换到:/usr/local/ mkdir -p mongodb groupadd -g 800 mongodb useradd -u 801 -g mongodb mongodb c ...

  8. hadoop2.6.0集群配置

    1.修改机器名 集群的搭建最少需要三个节点,机器名分别修改为master,slave1,slave2.其中以master为主要操作系统. 修改hostname: sudo gedit /etc/hos ...

  9. 多网卡绑定(bond)

    通过以下命令查看bond0的工作状态查询能详细的掌握bonding的工作状态,如这个绑定各网卡的工作状态.主备关系.链路侦测时间[root@ASMTS ~]# cat /proc/net/bondin ...

  10. edm 邮件制作指南

    格式编码 1.页面宽度请设定在 600px 到 800px 以内,长度 1024px 以内. 2.html 编码请使用 utf-8. 3.html 代码在 15KB 以内.(各个邮箱的收件标准不一样, ...