Hibernate的@DynamicUpdate是否适用于Blob?

时间:2015-07-10 17:10:50

标签: java hibernate blob

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

任何人都可以解释为什么会这样吗?这个功能是否适用于Blob?我搜索了文档,但没有找到。

PS我出于性能原因没有使用@DynamicUpdate。我知道从这个角度来看它是值得怀疑的。

1 个答案:

答案 0 :(得分:1)

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

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

但是,请记住特定于一对一关联的一般pitfalls。基本上,要么使用与optional = false的强制(@PrimaryKeyJoinColumn)一对一关联映射它,要么确保外键位于声明惰性关联的实体(表)中(在本例中为将Lob移出的原始实体)。否则,这种关联可能会非常渴望,从而违背了引入它的目的。