2个JPA实体在同一个表上

Joh*_*zzo 26 java orm hibernate jpa

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

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

但有时我需要显示200列.我想在200列上映射BigEntity类.它没有其他实体,它没有任何关联.

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

Chs*_*y76 17

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

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

... or using Annotations ...

@Basic(fetch = FetchType.LAZY)
String getExtendedProperty() { ... }
Run Code Online (Sandbox Code Playgroud)

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

另一种可能的情况是实际将两个完全独立的实体映射到同一个表,但使其中一个不可变.请记住,它们被Hibernate视为不同的实体,第一级/第二级缓存对于两者都是完全独立的(这就是为什么不变性很重要).

你将能够实现通过继承映射此功能,因为Hibernate 总是会返回一个实际的具体的实体类型.看一下我对Hibernate继承策略问题的回答,以获得详细解释.