我必須具有多對多關係的類(UserSet和User)(即每個用戶都可以屬於某個UserSets)。在數據庫中有一個UserSet表,一個用戶表和一個'在兩者之間'表(UsersToUserSets)。 現在,如果我想通過做休眠:從多對多關係中刪除元素時性能不佳
userSet.getUsers().remove(user);
session.flush()
休眠用來刪除USERSET用戶第一次獲取所有用戶屬於USERSET,然後刪除一個用戶,並更新「其間」表。
由於可能有成千上萬的用戶屬於UserSet,因此這對性能而言非常不利。有沒有辦法避免所有用戶被抓取?
映射文件的有趣的部分是這樣的:
<class name="...UserSet">
...
<set name="users" table="T_UM_USERS2USER_SETS">
<key column="FK_USER_SET_ID" />
<many-to-many column="FK_USER_ID"
class="...User" />
</set>
...
</class>
<class name="...User">
...
<set name="userSets" table="T_UM_USERS2USER_SETS" inverse="true">
<key column="FK_USER_ID" />
<many-to-many column="FK_USER_SET_ID" class="...UserSet" />
</set>
</class>
謝謝,你的第一個建議做到了。我已經嘗試了第二個,雖然它本身是有效的,但在程序的其他部分出現了一些問題(即在同一個會話中,集合與數據庫沒有相同的狀態,依此類推) 。 – Ridcully 2009-08-06 07:29:47