2个JPA实体在同一个表上

时间:2009-11-03 15:11:52

标签: java hibernate jpa orm

假设我有一个包含200列的表,其中大多数从未使用过。

我将SmallEntity映射到经常使用的10列。我在与其他实体的关联中使用它。它加载速度快,消耗少量内存并让我开心。

但有时我需要显示200列。我想在200列上映射BigEntity类。它不与其他实体绑定,也没有关联。

问题:你有这方面的经验吗?您是否意识到Hibernate会遇到任何问题,例如在一级缓存,脏检查和实体生命周期中?

1 个答案:

答案 0 :(得分:17)

最直接的方法是将您不经常使用的属性映射为lazy

<property name="extendedProperty" lazy="true" />

... or using Annotations ...

@Basic(fetch = FetchType.LAZY)
String getExtendedProperty() { ... }

Hibernate最初不会加载这些属性;相反,它们将按需加载(首次访问时)。您可以通过在HQL查询中使用fetch all properties子句强制Hibernate加载所有属性。

另一种可能的情况是实际将两个完全独立的实体映射到同一个表,但将其中一个实体immutable。请记住,Hibernate将 视为不同的实体,其中第一级/第二级缓存完全独立(这就是不变性很重要的原因)。

您将 NOT 能够通过继承映射实现此功能,因为Hibernate 始终返回实际的具体实体类型。请查看我对Hibernate Inheritance Strategy问题的回答,以获得详细说明。