这个好像做不到
懒加载目的是提高效率
加载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()逻辑非。
热门文章更多>>
标签更多>>
专题更多>>
最新文章更多>>
- 华为m3和ipad air2哪个好?华为平板m3和ipad air2详细区别对比评测
- 华为平板M3怎么调节色温保护眼睛?
- 8.4英寸华为平板M3真机图赏:主打影音视频和游戏
- 华为平板M3怎么使用自带的云服务导入旧手机资料数据?
- 怎么将之前手机中的就资料导入华为平板M3?
- 华硕ZenPad 3S 10值得买吗?华硕ZenPad 3S 10平板全面评测
- 小米平板2的16G内存够用吗? 16GB版小米平板2可以刷Win10系统吗?
- 华为平板M3值得买吗 华为平板M3全面评测图解
- 华为平板M3和小米平板2哪个好?小米平板2和华为平板M3详细区别对比评测
- 华为平板M3有几个版本?华为平板M3 WiFi版与LTE版各版本区别对比评测