1.迭代式获取结果(lterating results)
Iteratot iter=session.createQuery("from Temp").iterate();
while(iter.hasNext()){
Temp temp = iter.next();
}
2.返回元祖(tuples)的查询(一条结果中包含多个对象)
Iteratot iter=session.createQuery("select temp1,temp2 from temp join temp2.temp temp").list().iterator();
while(iter.hasNext()){
Object[] obj =(Object[])iter.next();
Temp temp = Object[0];
Temp2 temp2 = Object[1];
}
3.可滚动遍历(Scollable iteration)
待添加
4.过滤集合
可以动态的约束查询条件在系统底层也可以用HQL,SQL语句实现但是这样不仅要改动代码并且容易造成方法过多不容易维护,在数据库里创建视图也代替过滤集合但是没有
过滤集合灵活
过滤集合的不足:无法再运行中创建新的过滤器
5.修改持久对象
事务中的持久对象(通过session装载、保存、创建、查询出的对象)
被应用程序操作所造成的任何修改都会在session被刷出(flushed)的时候被持久化
这里不需要某个特定的方法(如:update(),设计她的目的是不同的) 将你的修改持久化
所以最直接更新一个对象的方法就是session处于打开状态时load他然后直接修改即可
Demp demo=session.load(demo.class,1);
demo.setname("修改");
session.flushed();//手动刷出session
6.update()saveOrUpdate()
通常下面的场合会使用update()和saveOrUpate()
程序在第一个session中加载对象
该对象被传递到view层
对象发生一些改动
该对象被返回到业务逻辑层
程序调用第二个session和update()方法持久化这些改动
savaOrUpdate()做下面的事
如果该对象已经在本session中持久化了将不做任何事
如果另一个本session关联的对象拥有相同的持久化标示将抛出一个异常
如果对象没有持久化标示属性则对其使用savae()
如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新的实例化对象,save()他
否则就update这个对象
merga()可非常不同
如果session中有相同的持久话标示的实例 用 用户提供的对象的状态覆盖旧的有持久化实例
如果session没有相应才持久实例 则尝试从数据库加载她或者创建新的持久化对象、
最后返回该持久实例
用户给出的这个对象没有被关联到session上,它依旧是脱管的
7. 删除持久对象
使用session.delete()从数据库中删除对象当然应用程序依然指向已删除对象的引用所以最好这样理解:
delete()的用途就是把一个持久对象变成一个瞬时对象
8 session刷出(flush)
每隔一段时间session会执行一些必要的sql语句把内存中的对象状态同步到JDBC连接中,这个过程被称为刷出,默认会在下面的时间进行
在执行某些查询之前
在提交事务的时候
在调用session.flush()的时候
9传播持久化
10.hibernate 二级缓存
hibernate.cache.use_second_level_cahche
二级缓存默认为打开
通常使用OScache缓存 前提必须导入OScache如果需要特殊配置缓存需要写oscache.propertes
需要配置缓存类<class_cache class=""></class_cache>
然后在相应的hmb.xml ID列的上部声明 <cache></cache>
usage参数 1.read-only 只读 2.read-write 安全读写 3.nonstrit-read-write 不安全读写 4.transactional事务
11.缓存一般使用环境
1.读取大于修改
2.缓存文件不能太大(考虑到硬件配置)
3.对数据要用独享控制
4.可以容忍无效数据出现
Iteratot iter=session.createQuery("from Temp").iterate();
while(iter.hasNext()){
Temp temp = iter.next();
}
2.返回元祖(tuples)的查询(一条结果中包含多个对象)
Iteratot iter=session.createQuery("select temp1,temp2 from temp join temp2.temp temp").list().iterator();
while(iter.hasNext()){
Object[] obj =(Object[])iter.next();
Temp temp = Object[0];
Temp2 temp2 = Object[1];
}
3.可滚动遍历(Scollable iteration)
待添加
4.过滤集合
可以动态的约束查询条件在系统底层也可以用HQL,SQL语句实现但是这样不仅要改动代码并且容易造成方法过多不容易维护,在数据库里创建视图也代替过滤集合但是没有
过滤集合灵活
过滤集合的不足:无法再运行中创建新的过滤器
5.修改持久对象
事务中的持久对象(通过session装载、保存、创建、查询出的对象)
被应用程序操作所造成的任何修改都会在session被刷出(flushed)的时候被持久化
这里不需要某个特定的方法(如:update(),设计她的目的是不同的) 将你的修改持久化
所以最直接更新一个对象的方法就是session处于打开状态时load他然后直接修改即可
Demp demo=session.load(demo.class,1);
demo.setname("修改");
session.flushed();//手动刷出session
6.update()saveOrUpdate()
通常下面的场合会使用update()和saveOrUpate()
程序在第一个session中加载对象
该对象被传递到view层
对象发生一些改动
该对象被返回到业务逻辑层
程序调用第二个session和update()方法持久化这些改动
savaOrUpdate()做下面的事
如果该对象已经在本session中持久化了将不做任何事
如果另一个本session关联的对象拥有相同的持久化标示将抛出一个异常
如果对象没有持久化标示属性则对其使用savae()
如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新的实例化对象,save()他
否则就update这个对象
merga()可非常不同
如果session中有相同的持久话标示的实例 用 用户提供的对象的状态覆盖旧的有持久化实例
如果session没有相应才持久实例 则尝试从数据库加载她或者创建新的持久化对象、
最后返回该持久实例
用户给出的这个对象没有被关联到session上,它依旧是脱管的
7. 删除持久对象
使用session.delete()从数据库中删除对象当然应用程序依然指向已删除对象的引用所以最好这样理解:
delete()的用途就是把一个持久对象变成一个瞬时对象
8 session刷出(flush)
每隔一段时间session会执行一些必要的sql语句把内存中的对象状态同步到JDBC连接中,这个过程被称为刷出,默认会在下面的时间进行
在执行某些查询之前
在提交事务的时候
在调用session.flush()的时候
9传播持久化
10.hibernate 二级缓存
hibernate.cache.use_second_level_cahche
二级缓存默认为打开
通常使用OScache缓存 前提必须导入OScache如果需要特殊配置缓存需要写oscache.propertes
需要配置缓存类<class_cache class=""></class_cache>
然后在相应的hmb.xml ID列的上部声明 <cache></cache>
usage参数 1.read-only 只读 2.read-write 安全读写 3.nonstrit-read-write 不安全读写 4.transactional事务
11.缓存一般使用环境
1.读取大于修改
2.缓存文件不能太大(考虑到硬件配置)
3.对数据要用独享控制
4.可以容忍无效数据出现