教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 求职职场 >

Hibernate对象关系映射总结(2)

来源:网络收集 时间:2026-09-13
导读: u1.setGroup88888(g); u2.setGroup88888(g); Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); //s.save(u1);/* 注释这两条语句:如果没有配级联关系:保存用户组不会自动保存组里的用户:

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

Hibernate对象关系映射总结(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/122030.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)