- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个应用程序,它要求以频繁的时间间隔或触发器从数据库中读取实体的状态。但是,一旦 hibernate 读取状态,它就不会重新读取它,除非我明确关闭 session 并在新 session 中读取实体。
每次我想读取实体时打开一个 session 然后关闭它是个好主意吗?这会给应用程序和数据库带来多少开销(我们也使用 c3p0 连接池)?
在再次读取 session 之前简单地将实体从 session 中驱逐就足够了吗?
最佳答案
您还可以使用refresh
来重新加载实体。或者如@Bozho 所述,evict
和clear
。
使用连接池,打开和关闭 session 的开销并不大。需要时间的是构建 session 工厂。
关闭并重新打开 session 的问题是,如果我没记错的话,已经加载的对象仍然会分离。这对于延迟加载来说可能是有问题的。因此,最好保持 session 打开并使用 evict
、clear
或 refresh
。
请注意,如果您驱逐该实体,并且您访问一个已加载的此类实体,您仍将获得旧数据。
MyEntity e = session.load( ... );
...
session.evict(e); // remove entity from the cache
String p = e.myProperty; // still the value at the time it was loaded
e = sesssion.load( ... ); // latest value
在你的情况下,引入一个设计指南可能会更好,该指南规定无论何时操纵实体,都应该首先刷新它。
MyEntity e = session.load( ... );
...
session.refresh( e ); // refresh entity and cache
String p = e.myProperty; // latest value
e = sesssion.load( ... ); // latest value
上面的代码只是伪代码,我没有查过。
请注意,如果 session 打开了一段时间,缓存可能会增长,在这种情况下您可能仍然希望清除
它。一般来说,最好保持 session 较短,以防止出现缓存增长问题,以及连接超时、事务超时和锁争用等问题。
关于java - 频繁关闭和打开 hibernate session 是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643037/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!