2015-07-10 81 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的原始實體出)。否則,該協會可能會有效地渴望,從而破壞了介紹它的目的。

相關問題