在我使用 hibernate 之前,我有幸在Process 范围的身份环境中工作。这意味着当我从数据库中获取 2 次相同的对象时,它们总是 == 。
在我搬到 hibernate 之前,我曾经通过保留一个HashMap
唯一的实例来实现这一点。每次获取结果集时,我都会检查此映射中的先前实例,以便返回相同的对象实例。为了避免内存泄漏并帮助垃圾收集器,我会先将这些唯一实例包装在WeakReference
对象中,然后再将它们放入映射中。
我(从这个有 10 年历史的框架)迁移到休眠状态,以确保我跟上最新的 Java 技术。我错误地认为hibernate现在会支持这个开箱即用的。当然,我很想再次实现自己的缓存。但我的目标实际上是用最少的自写代码来设置我项目的核心。
实际上,大多数网站都试图说服我根本不要使用进程范围标识,因为它应该是一件危险的事情(死锁,...)。老实说,我有点怀疑,我很确定我能做到。
我目前正在考虑让 process-scoped-identity 在我身后,但看起来有很多后果。例如:过去我有时将信息(在运行时计算)存储在瞬态字段中。当然,现在这已经不可能了。
一些网站写道,使用EHCache 框架可以达到进程范围的身份。我试过但还没有成功。默认情况下,它显然是关闭的,我没有找到任何关于如何激活它的示例。
一些建议非常受欢迎。
编辑:(更具体地说)
Process Scoped Identity
使用 Hibernate 时是否可以完成?- 如果是这样,这是一种好的做法,如何实现?