【发布时间】:2011-12-29 12:56:39
【问题描述】:
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及什么时候是正确的使用时间。
- 刷新
- 驱逐
- 复制
- 冲洗
我什至想知道每个人是做什么的,但我不确定,所以我请求你的帮助,因为我真的很想了解它。
我知道这是一个非常笼统的问题,但我认为了解这一切真的很有用。
谢谢。
【问题讨论】:
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及什么时候是正确的使用时间。
我什至想知道每个人是做什么的,但我不确定,所以我请求你的帮助,因为我真的很想了解它。
我知道这是一个非常笼统的问题,但我认为了解这一切真的很有用。
谢谢。
【问题讨论】:
Hibernate Documentation 给出了很好的例子。这个blog post 也会给你一些见解。我将从下面添加一些行。
可以使用refresh() 方法随时重新加载对象及其所有集合。这在使用数据库触发器初始化对象的某些属性时很有用。
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
更多示例请参见here。
每当您将对象传递给save(), update() or saveOrUpdate(),并且每当您使用load(), get(), list(), iterate() or scroll() 检索对象时,该对象都会被添加到Session 的内部缓存中。
当随后调用flush() 时,该对象的状态将与数据库同步。如果您不希望发生这种同步,或者您正在处理大量对象并且需要有效地管理内存,则可以使用evict() 方法将对象及其集合从一级缓存中移除。
ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set
while ( cats.next() ) {
Cat cat = (Cat) cats.get(0);
doSomethingWithACat(cat);
sess.evict(cat); // (if gives the compile time error then use it: sess.evict(cat.getClass());
}
阅读here的完整示例。
了解会话 API here。
【讨论】:
sess 开头,而之前没有提到它的含义。 (链接不算数。顺便说一句,其中一个是死的atm)
session.flush() 刷新会话强制 Hibernate 将 Session 的内存状态与数据库同步。 session.evict() 从会话缓存中分离对象。从会话中分离对象后,对对象的任何更改都不会保留。 session.refresh() 重新加载所有数据。 session.replicate() 数据以不同的模式复制到不同的Datastore。【讨论】: