Nim*_*Nim 5 java hibernate lazy-loading eager-loading
请在继续说"查询查询中的提取类型"之前阅读.那不是我追求的.
我正在寻找一种方法来急切加载一个完整的对象图(对象+所有子对象及其所有子对象等).
我不希望枚举要加载的所有属性.直到运行时我才知道它们.
N + 1个查询不是问题.但是在这个神奇的操作结束时,我不想在我的图表中留下单个代理或惰性集合.
应该可以编写一些反射和递归查看所有属性的代码.但是收藏会使这种尴尬和复杂.
有些人推荐Dozer这种东西,但这似乎有点过分,所以我想把它作为最后的手段保存.
一个简单的解决方案是指定lazy="false"所有集合(1:N 和 N:M)和关联(1:1)。
这会将每个事务的整个图表加载到内存中。因此,为了使其正常工作,您最多应该有一笔交易,否则会非常非常严重地损害性能。
虽然这可以满足您的要求,但成本可能太高。请注意,您可以使用“获取配置文件”在运行时选择不同的策略,但当您请求对象时,Hibernate 总是为您提供一个副本供您使用,因此它每次都必须复制图表。
对我来说,这听起来 Hibernate 根本不是完成这项任务的工具。使用 Hibernate 映射实体很方便,但代价是 Hibernate 会泄漏到您的模型和业务代码中。如果 Hibernate 施加的限制不符合您的要求,那么您应该寻找其他地方。
也许您可以接受Record类型而不是完全充实的 Java bean。如果是这样,那么您可以查看jOOQ或实现“活动记录”模式的框架。
如果您需要 bean 并且不限于某种类型的数据库,请尝试 OO 数据库,例如db4o。
最后,为什么要使用 SQL?如果您始终需要整个对象图,为什么不简单地将其序列化到文件并在启动时加载它呢?或者使用内存驻留数据库。
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |