Hibernate对象关系映射总结(2)
u1.setGroup88888(g); u2.setGroup88888(g); Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); //s.save(u1);/* 注释这两条语句:如果没有配级联关系:保存用户组不会自动保存组里的用户:
此时的用户是游离状态:对应数据库没有该记录所有不会自动帮你保存*/*/
//s.save(u2); s.save(g);
s.getTransaction().commit(); }
SessionFactory.getCurrentSession与openSession的区别
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了, 也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,
那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭 2. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置: * 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property> * 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property> 如:
public void save(MainTable mainTable) {
Session session = sessionFactory.openSession(); session.beginTransaction(); session.persist(mainTable); session.getTransaction().commit(); session.close();
} public void testSaveUser() { User2 u = new User2(); u.setName("我是用户1"); Group2 g = new Group2(); g.setName("我是---用户组1");
Hibernate对象关系映射总结
u.setGroup88888(g); Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); s.save(g); s.save(u); s.getTransaction().commit(); }
Hibernate 的get和load方法的区别
当查询的数据不存在时表现不一样:
1:load返回的是代理对象,等到要用该对象时,才会发sql语句从数据库取, 当数据库没有对应的记录时会报错 2:get 直接从数据库加载,不会延迟加载,当数据库没有对应的记录时返回null.
persist(),save(),saveOrUpdate()区别
persist():只接受临时状态的对象,即主键没有值的对象,如果传递一个非临时状态的对象给它,则会抛出异常。 save():无论对象是否处于临时状态都会向数据库保存
saveOrUpdate():如果主键有值则执行update,如果主键没有值则执行insert
load()---->setXX() 和 update()区别
load()--->setXX():支持动态更新 update:不支持动态更新
动态更新需要在配置文件里加上:dynamic-update="true"
Hibernate 的动态更新
如: Java代码
<class name="ers" table="users" dynamic-update="true"> public void testUpdateUser1() {
testSaveGroup();/*准备用户组数据*/ Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); User2 u = (User2)s.get(User2.class, 2); /*对象u:持久状态*/ u.setName("我是修改的用户名称");
u.getGroup88888().setName("我是修改的用户--组名称"); 发送sql语句支持动态更新 s.getTransaction().commit(); /*session关了:处于托管状态*/
u.setName("我是被修改的用户3");
u.getGroup88888().setName("我是修改的用户3--组名称"); Session s2 = sessionFactory.getCurrentSession(); s2.beginTransaction(); s2.update(u);
s2.getTransaction().commit(); }
1:通过配置文件xml实现动态更新:
<hibernate-mapping package=".hibernateTest.oneToManyDupDirection" >
Hibernate对象关系映射总结
<class name="Department" table="oneToManyDupDir_Department"
dynamic-insert="true" dynamic-update="true">
<cache usage="read-write"/> <id name="id"> <generator class="native" /> </id> <property name="name"/> <set name="emps" inverse="true" lazy="true" cascade="all"> <key column="depart_id"/> <one-to-many class="Employee" /> </set> </class> </hibernate-mapping>
2:JPA中可不可以配置像Hibernate那样的dynamic-update属性,以实现动态更新, 只更新那些实体类中不为Null的字段
evict():从session缓存里清除某一个对象 clear():从session缓存里清除所有对象
flush():session flush方法主要做两件事:
* 清理缓存 * 执行sql
2.Hibernate里,对象都有三种状态:临时状态,持久状态,脱管状态
临时状态:刚创建出来的对象一般都为临时状态,临时状态的对象的主键是没有值的,如果有值就是脱管
状态。
持久状态:对象处于Hibernate的session范围之内,处于持久状态的对象的属性发生改变都会影响到数据库里
的数据改变。
脱管状态:和临时状态唯一区别就是主键有值:不处于Hibernate的session范围之内
也就是说:在数据库中有与之匹配的数据,但是该对象没有纳入session管理
======================Hibernate中各种查询方法的总结========================
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e"); 2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141); 3. 使用get方法(主键查询)
Emp e = (Emp)session.get(Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?"); q.setParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?"); q.setParameter(0, "%M%");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename"); q.setParameter("lkename", "%L%"); 5. 命名查询
Hibernate对象关系映射总结
<query name="myquery"> <![CDATA[ from com.sun.hibernate.Employer where job = ? ]]> </query>
Query q = session.getNamedQuery("myquery"); q.setParameter(0, "MANAGER"); 6. 属性查询
session = HibernateSessionFactory.getCurrentSession();
Query query = session.createQuery("select jzmc, quyu, yzdh from HetongVo "); list = query.list() …… 此处隐藏:3836字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




