2015-07-10 47 views
0

我使用Hibernate 4.2.3和我有类似以下的类:Hibernate的@DynamicUpdate是否可以与Blobs一起使用?

@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出于性能原因。我知道从这个角度来看使用它会有问题。

回答

0

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

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

但是,请记住一般的pitfalls特定于一对一的关联。基本上,要么将其与@PrimaryKeyJoinColumn的强制性(optional = false)一对一关联进行映射,要么确保外键位于声明惰性关联的实体(表格)中(在这种情况下,将移动Lob的原始实体出)。否则,该协会可能会有效地渴望,从而破坏了介绍它的目的。

相关问题