【问题标题】:Does Hibernate's @DynamicUpdate work with Blobs?Hibernate 的@DynamicUpdate 是否适用于 Blob?
【发布时间】:2015-09-29 13:05:45
【问题描述】:

我正在使用 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。)

谁能解释为什么会发生这种情况?此功能是否适用于 Blob?我已经搜索过文档,但没有找到。

PS 出于性能原因,我没有使用@DynamicUpdate。我知道从这个角度使用它是有问题的。

【问题讨论】:

    标签: java hibernate blob


    【解决方案1】:

    实现 Lobs 真正延迟加载的最安全和最便携(在不同数据库和 JPA 提供程序之间)的方法是在原始实体和将 Lob 移动到的新实体之间创建 an artificial lazy one-to-one association

    这种方法也适用于其他类型的优化,例如当我想启用复杂实体的二级缓存,但实体的几列经常更新时。然后我将这些列提取到一个单独的非二级缓存实体。

    但是,请记住特定于一对一关联的一般 pitfalls。基本上,要么将其映射为与 @PrimaryKeyJoinColumn 的强制性 (optional = false) 一对一关联,要么确保外键位于声明惰性关联的实体(表)中(在这种情况下,原始实体来自Lob 被移出)。否则,该关联可能会变得非常急切,从而破坏了引入它的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多