我正在使用 Hibernate 4.2.3,并且我有一个类似于以下内容的类:
@Entity
@DynamicInsert
@DynamicUpdate
@SelectBeforeUpdate
public class Test {
@Id
private BigInteger theId;
@Lob
@Basic(fetch = FetchType.LAZY)
@JsonIgnore
private Blob data;
@Lob
@Basic(fetch = FetchType.LAZY)
@JsonIgnore
private Blob otherData;
// Getters and setters....
}
为更新生成的 sql 包含 data
列,即使它没有更改。 (准确地说,我所做的是获取对象,分离它,读取 data
并使用它生成 otherData
,设置它,然后调用 saveOrUpdate
在 session 中。)
谁能解释一下为什么会发生这种情况?此功能可以与 Blob 一起使用吗?我搜索了文档但没有找到。
PS 出于性能原因,我没有使用 @DynamicUpdate。我知道从这个角度来看使用它是有问题的。
最佳答案
实现真正的 Lob 延迟加载的最安全、最可移植(在不同数据库和 JPA 提供程序之间)的方法是创建 an artificial lazy one-to-one association在原始实体和您将 Lob 移动到的新实体之间。
这种方法也适用于其他类型的优化,例如当我想启用复杂实体的二级缓存,但实体的几列更新频繁时。然后,我将这些列提取到一个单独的非二级可缓存实体。
但是,请记住一般性的 pitfalls特定于一对一关联。基本上,要么将其映射为与 @PrimaryKeyJoinColumn
强制(可选= false
)一对一关联,要么确保外键位于实体(表)中声明惰性关联(在本例中是 Lob 被移出的原始实体)。否则,该关联可能实际上是急切的,从而违背了引入它的目的。
关于java - Hibernate 的 @DynamicUpdate 是否可以与 Blob 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346576/