同一表上的 2 个 JPA 实体
假设我有一个包含 200 列的表,其中大多数列从未使用过。
我将 SmallEntity 映射到经常使用的 10 列。我在与其他实体的关联中使用它。它加载速度快,消耗很少的内存,让我开心。
但有时我需要显示 200 列。我想在 200 列上映射 BigEntity 类。它绑定到没有其他实体,它没有关联。
问题:你有什么经验吗?您是否知道Hibernate会遇到任何麻烦,例如在第一级缓存,脏检查和实体生命周期中?
假设我有一个包含 200 列的表,其中大多数列从未使用过。
我将 SmallEntity 映射到经常使用的 10 列。我在与其他实体的关联中使用它。它加载速度快,消耗很少的内存,让我开心。
但有时我需要显示 200 列。我想在 200 列上映射 BigEntity 类。它绑定到没有其他实体,它没有关联。
问题:你有什么经验吗?您是否知道Hibernate会遇到任何麻烦,例如在第一级缓存,脏检查和实体生命周期中?
执行此操作的最直接方法是映射您不经常使用的属性:懒惰:
<property name="extendedProperty" lazy="true" />
... or using Annotations ...
@Basic(fetch = FetchType.LAZY)
String getExtendedProperty() { ... }
休眠最初不会加载此类属性;相反,它们将按需加载(首次访问时)。您可以通过在 HQL 查询中使用“获取所有属性”
子句来强制 Hibernate 加载所有属性。
另一种可能的情况是将两个完全独立的实体实际映射到同一个表,但使其中一个不可变。请记住,Hibernate会将它们视为不同的实体,第一级/第二级缓存对于两者都是完全分开的(这就是为什么不可变性很重要的原因)。
您将无法通过继承映射实现此功能,因为 Hibernate 始终返回实际的具体实体类型。看看我对Hibernate继承策略问题的回答,以获得详细的解释。