0
由於2H我試圖想出以下問題的解決方案,我只是找不到一個適當的方式做到這一點:多對多關係,刪除記錄從關係表
我有三個表在MySQL數據庫:
角色 [ROLE_ID] [ROLE_NAME]
權限 [permission_id] [PERMISSION_NAME]
PermissionToRole [permission_id] [ROLE_ID]
我的角色類的關係的所有者:
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(name="permissiontorole",
joinColumns={@JoinColumn(name="role_id")},
inverseJoinColumns={@JoinColumn(name="permission_id")})
權限類映射定義爲:
@ManyToMany(mappedBy="permissions")
private Set<UserRole> userRoles = new HashSet<UserRole>();
現在,當我刪除任何權限或角色的相應記錄(這是預期的和期望的),但是這種關係仍然存在於PermissionToRole表中,並且我不知道如何在刪除角色或權限記錄時刪除該關係。當我將級聯類型更改爲ALL時,那麼當我刪除角色或權限時,關係將被刪除,但其他記錄也是如此。如果我刪除角色權限也被刪除。
任何想法如何處理它?
是啊,這工作,但同時,我也發現了其他的解決方案,我不知道哪一個是更好。我使用delate action = cascade在表中設置了外鍵,那也沒有額外的代碼做這項工作,所以哪一個更好,爲什麼?很顯然,一方面我的解決方案中的代碼更少,但另一方面它爲DB增加了額外的複雜性 – Stugal
通常,當您刪除角色仍然引用的權限時,您希望引發異常,因爲這意味着您可能忘記了一些東西。由於級聯的緣故,盲目地刪除權限及其與角色的關聯允許刪除權限,甚至不檢查角色是否仍然引用它,這可能是一個問題。 –
是的你說得對。我還有一個問題,爲了更新UserRole記錄(添加額外的權限),我首先需要將它從數據庫中提取出來並將新的權限添加到列表中?還是有更好/更快的方式? – Stugal