編輯2011/5/11:關係正處於休眠+吉利德應用上關聯的對象刪除
我想這是比什麼是低於差些;在我部署的QA實例中,如果我多次刷新主儀表板,最終會刪除我的用戶的多對多組關聯。在這一點上,服務器端只有選擇語句被調用;希望我能通過這些最新的測試縮小範圍。
原創:
大家好。我對一個相當複雜的對象有問題;問題如下:當我將對象從客戶端發送到服務器進行保存時,它似乎是隨機清除關聯對象上的多對多關係。更糟糕的是,經過大約兩個月的意識到問題後,我無法自己再現問題。我有應用程序用於與質量檢查小組進行測試;他們每天都在使用該程序,並加入新的和遺留應用程序。這個問題一天發生多達三次。
我會盡我所能提供儘可能詳細的信息,並非常感謝任何人蔘觀!
應用程序框架是GWT 2.1 + Gilead + Hibernate 3 + MySQL InnoDB。我讓Hibernate處理任何級聯等,所以沒有在DB中定義,儘管所有外鍵都在DB中設置。
下面是來自映射一些摘錄:
<hibernate-mapping>
<class name="com.example.domain.Close" table="CLOSE">
<many-to-one name="updateUser"
class="com.example.domain.User"
column="LAST_UPDATE_USER"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.example.domain.User" table="USER" batch-size="25">
<set name="groups" table="USER_GROUP" lazy="true" batch-size="25">
<key column="USER_ID"/>
<many-to-many column="GROUP_ID" class="com.example.domain.Group"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.example.domain.Group"
table="GROUP" batch-size="25">
<set name="users" table="USER_GROUP" lazy="true" inverse="true">
<key column="GROUP_ID"/>
<many-to-many column="USER_ID" class="com.example.domain.User"/>
</set>
<set name="permissions" table="PERMISSION_GROUP" lazy="true" inverse="true">
<key column="GROUP_ID"/>
<many-to-many column="PERMISSION_ID"
class="com.example.domain.Permission"/>
</set>
<hibernate-mapping>
<class name="com.example.domain.Permission"
table="PERMISSION">
<set name="groups" table="PERMISSION_GROUP" lazy="true">
<key column="PERMISSION_ID"/>
<many-to-many column="GROUP_ID"
class="com.example.domain.Group"/>
</set>
</class>
</hibernate-mapping>
保存對象是簡單的saveOrUpdate()方法的調用:
Session session = gileadHibernateUtil.getSessionFactory()
.getCurrentSession();
session.beginTransaction();
try {
session.saveOrUpdate(close);
} catch (Exception e) {
e.printStackTrace();
session.getTransaction.rollback();
}
session.getTransaction.commit();
return close;
的關閉「UpdateUser兩個」是裝入的對象在用戶登錄時它被加載相關的組和權限,以便系統可以授予/拒絕對應用程序模塊的訪問。我做
close.setUpdateUser(exampleApp.getUser());
之前發送對象回服務器。
應用程序中有很多其他地方會發生此類操作,但不會產生不必要的副作用。它可能歸結爲與Close對象關聯的客戶端代碼的複雜性,或者說,我的實現。
我花了很多時間在官方Hibernate文檔上尋找可能出現的相關問題等,我想也許現在是尋求幫助的好時機。我必須站起來,堅持下去,但也許只是問問會幫助我解決問題。
我不確定還有什麼現在可以提供相關的。希望這裏到目前爲止有什麼相關性!
感謝收聽!
編輯
May 5 12:18:38 localhost jsvc.exec[10117]: Hibernate: insert into example_dev.RECENT_ITEM (OBJECT_TYPE, OBJECT_ID, DATE, USER_ID) values (?, ?, ?, ?)
May 5 12:18:38 localhost jsvc.exec[10117]: Hibernate: delete from example_dev.PERMISSION_GROUP where PERMISSION_ID=?
May 5 12:18:38 localhost last message repeated 19 times
May 5 12:18:38 localhost jsvc.exec[10117]: Hibernate: delete from example_dev.USER_GROUP where USER_ID=?
May 5 12:18:38 localhost jsvc.exec[10117]: Hibernate: delete from example_dev.USER_DESIGNATION where USER_ID=?
看來,刪除正在發生此插入後的權利..先前的操作都是選擇。但User中沒有任何應該從RecentItem級聯。
[集合中的Hibernate增強類名](http://groups.google.com/group/google-web-toolkit/browse_thread/thread/75c52203f4a5cafc) - 進入這個問題,其中類名將被修改休眠對於同一類型的多個集合 - 花了一點時間來追蹤它。錯誤是'域類型Foo _ $$ _ javassist_45無法發送到客戶端' – CyDharttha 2011-06-10 17:06:15
[Custom ServiceDecorator](http://code.google.com/p/listwidget/source/browse/trunk/src/main/java/com/ turbomanage/listwidget/server/servlet/BugFixSLD.java?r = 25) - 上面的一些幫助,來自上述Objectify教程的示例應用程序 – CyDharttha 2011-06-10 17:06:45