Java 休眠:刷新、逐出、复制和刷新
我希望我知道这个列表中的每一项具体是什么,它是如何工作的,结果是什么,什么时候是正确的使用时间Java 休眠:刷新、逐出、复制和刷新,java,hibernate,Java,Hibernate,我希望我知道这个列表中的每一项具体是什么,它是如何工作的,结果是什么,什么时候是正确的使用时间 刷新 驱逐 复制 冲洗 我甚至想知道每个人都做了什么,但我不是绝对肯定,所以我请求你的帮助,因为我真的想了解它 我知道这是一个相当普通的问题,但我认为了解这一切真的很有用 谢谢。这个就是很好的例子。这也会给你一些见解。我将从下面添加一些行 可以使用refresh()方法随时重新加载对象及其所有集合。当使用数据库触发器初始化对象的某些属性时,这非常有用 sess.save(cat); sess.flus
refresh()
方法随时重新加载对象及其所有集合。当使用数据库触发器初始化对象的某些属性时,这非常有用
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
有关更多示例,请参见
每当您将对象传递给save()、update()或saveOrUpdate()
,以及每当您使用load()、get()、list()、iterate()或scroll()
检索对象时,该对象将添加到会话的内部缓存中
随后调用flush()
时,该对象的状态将与数据库同步。如果不希望发生此同步,或者正在处理大量对象并需要高效地管理内存,则可以使用execute()
方法从一级缓存中删除对象及其集合
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());
}
请阅读中的完整示例
阅读会话API。replicate()
用于在需要使用给定标识符保存实体时,而不是使用save()
/persist()
,尽管已将所述实体的标识符配置为生成
当某些实体(可能来自外部系统)具有预先存在的标识符,而相同类型的其他实体需要生成它们的标识符时,这是非常有用的
但是,由于Hibernate(,)中存在一个长期存在的bug,replicate()
无法在某些类型的id生成器中正常工作。此问题限制了replicate()
的可用性,并要求您在id生成器策略受到影响且无法更改时实施令人不快的变通方法来模拟其行为。
刷新会话将强制Hibernate将会话的内存状态与数据库同步李>session.flush()
将对象从会话缓存中分离。将对象从会话中分离后,对对象的任何更改都不会持久化李>session.execute()
重新加载所有数据李>session.refresh()
以不同的模式复制数据session.replicate()