2010-02-25 81 views
5

我有一個名爲Execution的hibernate實體。它在我的流程開始時創建,並在最後更新,表明它是如何完成的。更新JPA-Hibernate實體而不從數據庫中選擇它

我想更新此實體的單個屬性,而不會在我的數據庫中導致選擇。

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); // - >調用此方法在我的數據庫中激發SELECT。我不想讓它發生,我只想更新我的實體。

這不是特定於此方法的任何其他方法,稱爲SELECT子句中的結果。實際上,即使在我的方法被調用之前,select也會發生。我的印象是,hibernate代理將一些代碼放在我的類無參數構造器中,以在每次調用任何方法時觸發一個選擇。

是否可以在不觸發數據庫中的SELECT語句的情況下更新JPA/Hibernate實體?

回答

1

這就是Hibernate的工作原理。它的代理對象在任何非id屬性被訪問時從數據庫加載真實對象。

嘗試在您的進程開始時保存/加載對象(執行SELECT),並確保會話不會在觸摸對象時自動刷新(我認爲默認行爲不是自動刷新,但值得一試)。

或者你也可以在處理過程中嘗試從Hibernate會話中分離出你的對象。

+1

我會接受這個答案作爲正確的答案。通過使用JPA-QL批量更新/插入http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/batch.html#batch-direct – user266391 2010-02-25 17:25:50

+0

,我碰到了一個更簡單的解決方案@ user266391我不熟悉JPA,所以感謝鏈接:-) – 2010-02-25 20:28:01

相關問題