2016-12-01 133 views
0

我正在使用Spring數據JPA和postgres數據庫。 我有兩個實體,即組和用戶。 我已經使用Spring的CrudRepository接口創建了存儲庫。JPA- ManyToMany關係刪除操作從輔助表中刪除所有實體

@Entity 
public class Group { 
@ManyToMany(cascade=CascadeType.ALL) 
@JoinTable(
     name="group_user_bridge", 
     [email protected](name="joinTbl_groupid", referencedColumnName="groupid"), 
     [email protected](name="joinTbl_agentid", referencedColumnName="userid") 
     ) 
private Set<User> users; 
.... 
} 

類用戶

@Entity 
public class User { 

@ManyToMany(mappedBy="users",cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
private List<Group> groups; 
..... 
} 

Repository.save:正常工作。

@Test 
    public void addGroup(){ 
     Group hg = new Group(); 

     User h1 = new User(); 
     User h2 = new User(); 
     some setters for user entity object 

     hg.setName("testGroup"); 
     ... some setters for groups 

     HashSet<User> groupMembers = new HashSet<User>(); 
     groupMembers.add(h2); 
     groupMembers.add(h1); 
     hg.setGroupMembers(groupMembers); 

     hg = groupRepository.save(hg); 

問題

當我刪除使用groupRepository.delete(groupEntity)組,將刪除組,組和用戶從連接表的關聯。
但它也從用戶表中刪除用戶。實際上用戶記錄不應該被刪除

如何防止用戶在這裏刪除?

我使用@SQLDelete註釋軟刪除組和用戶記錄。但我無法爲連接表記錄實現相同的功能。 連接表中的記錄從我想要阻止的表中硬刪除。

如何防止連接表記錄的硬刪除?

在此先感謝。

回答

0

您目前有這個註釋在UserGroup類:

@ManyToMany(cascade=CascadeType.ALL) 

Hibernate docs表明,這將導致以下操作的級聯:save, delete, update, evict, lock, replicate, merge, persist

因此,它是當你刪除感Group實例,刪除級聯到User實例。

考慮更改註釋是這樣的:

@ManyToMany(cascade=CascadeType.SAVE_UPDATE) 

或者任何適用於您的應用程序。

(可選)在刪除Group之前,您可以從Group中刪除User實例。

+0

感謝您的回覆。將檢查SAVE_UPDATE並檢查。我正在考慮一個場景,用戶可以在整個組中移動,因此,如果一旦組被刪除,用戶應保持完好。 – Yogesh