2个JPA实体在同一个表中

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

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

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

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

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

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

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

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

您将无法通过inheritance映射实现此function,因为Hibernate 始终返回实际的具体实体类型。 请查看我对Hibernateinheritance策略问题的答案,以获得详细说明。