一尘不染

同一张表上的2个JPA实体

hibernate

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

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

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

问题:您有这样做的经验吗?您是否知道Hibernate可能会遇到的任何麻烦,例如在一级缓存,脏检查和实体生命周期中总的来说?


阅读 802

收藏
2020-06-20

共1个答案

一尘不染

最简单的方法是将不经常使用的属性映射为惰性

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

... or using Annotations ...

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

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

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

你将 能够实现通过继承映射此功能,因为Hibernate 总是 会返回一个实际的具体的实体类型。看看我对HibernateInheritanceStrategy问题的回答以获取详细说明。

2020-06-20