Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
將cats
變成當前會話的持久對象sess
?Hibernate標準加載對象,會使對象變成持久性的嗎?
我查了API,但沒有提及任何東西。我非常擔心這一點,所以我希望我能找到某處正式提及對象是否會持久化,當我第一次使用Hibernate的session
加載對象時,我不知道該對象變爲持久對象,並且我意外修改了值在對象內部,更改會刷新到數據庫,這對我來說會造成很大的問題。
在此基礎上https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html,
org.hibernate.Criteria接口表示反對 特定持久類的一個查詢。
是否表示返回的對象是持久對象?我可以安全地更改對象內的值嗎?
如果對象不會是持久的,爲什麼有一個setReadOnly
屬性來控制的API文檔:
設置只讀/修改模式,通過 這個標準裝載實體和代理。此設置將覆蓋 持久性上下文的默認設置。
以上我很困惑!
這太糟糕了......你知道我怎樣才能通過Hibernate獲取數據,但他們不處於持久狀態?這是非常危險的,如果有人不知道並意外地衝洗它... – GMsoF
從會話分離對象或使session.setDefaultReadOnly(true)。詳細的選項可以發現:http://stackoverflow.com/questions/5800814/is-it-possible-to-detach-hibernate-entity-so-that-changes-to-object-are-not-aut – Justas
謝謝你分享。太糟糕了,如果我們總是需要在數據加載後分離,那太麻煩了。使用'setDefaultReadOnly'將刪除所有的持久對象,而不是特定的對象。除此之外,hibernate沒有任何加載數據的方法會自動變成非持久對象? – GMsoF