用户登录
用户注册

分享至

hibernate 懒加载配置

  • 作者: Life76339438
  • 来源: 51数据库
  • 2020-12-17
这个好像做不到

懒加载目的是提高效率

加载UserRole的一个属性和UserRole的所有属性,这样的效率差距非常小
(如果UserRole有Set等关联的,肯定已经采用了懒加载)

如果你的UserRole只有一个属性经常变动,而其它的不懂的话
建议给不经常变动的属性加入
dynamic-insert="true" dynamic-update="true"

意思就是动态插入更新
这样,当你把UserRole加载上来后(全部属性),你更新了一个属性(没有动态插入更新的)
那么你update之后
hibernate发出的sql语句,只有一个属性被赋值,而其它的(dynamic属性)是不会发出更新语句的



  通过hibernate获取数据可以使用:
1。session的get()和load()方法,这两方法至少需要传递一个类模板和要查询的对象的id,因为hibernate中区分对象时通过对象的主键(id)来区分的。他们都只能返回一个结果,不同的是,get()方法在没有查询到数据时会返回一个null,而load()方法会抛出objectnotfoundexception的异常,且load()方法支持延迟加载。
2。query对象的iterator()和list()方法,可以返回一个结果集。list()方法不支持延迟加载,而iterator()方法支持延迟加载,即先得到结果集的所有id,然后在访问对象属性的时候才会真正的去执行sql语句根据id查询出对应的信息。
3。使用hibernate提供的hql语言来查询数据。hql语言是hibernate官方推荐使用的语言,它可以提供丰富的,面向对象的持久化数据操作。如:查询customer中name="张三"的人员的信息,使用hql语句stringhql = "from customerpo where customerpo.name=:cname";query query =session.createquery(hql);
hql语言是面向对象的,所以from后面不是数据表的名称,而是po(持久化对象)对象的类名,where条件也不是数据表字段,而是po的属性,其中:cname是一个展位符,如同在jdbc中使用的‘?’一样的效果。要执行hql语句需要query来执行,通过session得到query对象,设置占位符的值query.setparmater("cname","张三");接下来调用query的list()方法得到结果集listlist = query.list();在hql语句中同样可以使用order by、groupby、having、desc、asc等sql语言的关键字,只是需要注意,这里只用的是对象及其属性,而不是数据表和数据字段,查询条件出来在hql语句中只用sql关键字外,还可以使用restrictions来设置条件criteria.add(restrictions.eq("name","张三"))。还可以使用criteria来执行hql语句,使用方法和query基本相同。
restrictions条件查询设置有:eq()等于、not()不等于、gt()大于、lt()小于 、le()小于等于、isnull()等于空、in()等于范围内的某值、between()在两值之间、like()字符串匹配、and()逻辑与、or()逻辑或、not()逻辑非。
软件
前端设计
程序设计
Java相关