Hibernate ManyToOne, OneToMany的理解
User to Group, Many to One的关系
Test Case 1:
session.beginTransaction();
user.setGroup(group);
session.save(group);
session.save(user);
session.getTransaction().commit();
先保存group, 在保存user,没问题两条SQL INSERT语句发出来,数据库有数据,
Hibernate: insert into t_group (name) values (?)
Hibernate: insert into t_user (userId, userName) values (?, ?)
Test Case 2:
session.beginTransaction();
user.setGroup(group);
session.save(user);
session.getTransaction().commit();
先不保存group, 直接保存user,会有INSERT语句发出来,和TransientObjectException抛出。
原因是没有先保存关联的One那一端
Hibernate: insert into t_user (userId, userName) values (?, ?)
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.fm.entity.Group
结论,在ManytoOne中,必须先保存One的一端,因为没有One的一端,Many一端没地方依赖。
如果想能够单独保存,多的一端User,可以在ManyToOne前面加上optional=true,如下:
@ManyToOne(optional=true)
@JoinColumn(name="userId")
private Group group;
Group to User , One to Many的关系
在one to many的情况,下可以不先保存 group mapping的 user,直接保存group,没有问题。
session.beginTransaction();
session.save(group);
session.getTransaction().commit();
Hibernate: insert into t_group (name) values (?)
如果想保存一端的时候,顺带把另外一端也保存掉,使用如下注解:
@ManyToOne(cascade={CascadeType.ALL})
Hibernate ManyToOne, OneToMany的理解的更多相关文章
- 对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的?
对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的? 解答:延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载.那么Hibernat ...
- Hibernate ManyToOne Mappings 多对一关联映射
Hibernate ManyToOne Mappings 多对一关联映射 Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml)2.创建持久化类 ...
- Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]
1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java package com.rhythmk.model; import java.util.Date; ...
- 转Hibernate Annotation mappedBy注解理解
在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...
- hibernate manytoone中的lazy EAGER
Hibernate中的字段映射中的Fetch有两种方式:EAGER和LAZY Eager:全部抓取 Lazy:延迟抓取 如果在字段中声明为Eager,那么在取得当前Bean时,同时会抓取Bean中的关 ...
- 对spring,struts,hibernate及MVC的理解
对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...
- Hibernate:不容易理解的 lock 和 merge
背景 lock 和 merge 在字面上很容易理解它们的语义,不过它们的实际行为所代表的语义范围要大一点,本文就简单的记录下来,还请朋友们多批评和指正. Lock 官方的注释 /** * Obtain ...
- @manyToOne.@oneToMany
@ManyToOne注解的这端,是多端 1.在注释@ManyToOne(cascade=CascadeType.REFRESH,optional=true)中将属性optional设置为true,这可 ...
- spring+hibernate工作流程文件名理解
reg.jsp regsuccess.jsp User.java UserDAO.java UserDAOImpl.java User.hbm.xml Reg.java RegImpl.java Re ...
随机推荐
- linux配置tomcat以service方式启动(转)
在/etc/init.d目录下新建文件,命名为tomcat 对tomcat文件进行编辑. cat /etc/init.d/tomcat #!/bin/bash # description: Tomca ...
- freemarker页面如何获取绝对路径basePath
1. freemarker获取系统相对路径方式 spring-mvc.xml 中配置 <!-- FreeMarker视图解析 如返回userinfo..在这里配置后缀名ftl和视图解析器.. - ...
- 通过代码自定义cell(cell的高度不一致)
- linux基础
用户管理: id:可以查看当前用户 whoami:查看当前的用户 who:看当前已经登录的用户 w:也可以看 添加用户:useradd name 添加用户组: useradd -g groupnam ...
- Nodejs的Express完成安装指导
一.安装 官网http://expressjs.com/ express4.X的有一些变化,4.x版本中将命令工具单独分出来了(https://github.com/expressjs/generat ...
- Hadoop中Combiner的使用
注:转载自http://blog.csdn.net/ipolaris/article/details/8723782 在MapReduce中,当map生成的数据过大时,带宽就成了瓶颈,怎样精简压缩传给 ...
- Design and Analysis of Algorithms_Fundamentals of the Analysis of Algorithm Efficiency
I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...
- 游戏机制(Machinations)在线演示工具
>>> http://www.jorisdormans.nl/machinations/
- web前端基础知识 jQuery
通过之前的学习我们已经了解了html.css.javascript的相关知识:本次我们就共同学习进阶知识:jQuery~ 一.什么是jQuery? jQuery其实就是一个轻量级的javascript ...
- Hihocoder 1059 String Matching Content Length
预处理下连续相等的字符个数其实主要是看是否满3个 后面递推的时候特判下+1上次递推[i-1,j-1]不是来自[i-2,j-1]也不是来自[i-1,j-2]其实就是只来自[i-4,j-4]+3,和[i- ...