當前位置:網站首頁>@JoinTable會自動删除關聯錶的數據

@JoinTable會自動删除關聯錶的數據

2022-01-26 23:00:43 滕青山yyds

問題

使用@JoinTable關聯上關聯錶後,當我更新主錶的某條數據,jpa會自動删除這條數據所關聯的關聯錶對應數據。

例如:

User user = new User(); //detached
user.setId(1L); // for merge
user.setEmail("[email protected]");

entityManager.merge(user);

jpa執行的語句:

UPDATE user... /*ok!*/
delete from user_role where ... /* I'd like to avoid it! */

Stack Overflow中也找到了很多人跟我同樣的問題,但是沒有答案。

java - JPA (with Hibernate) @ManyToMany @JoinTable relationship cascade - Stack Overflow
jpa - How to disable delete for JoinTable? - Stack Overflow
hibernate - JPA Cascade Delete JoinTable Row - Stack Overflow
hibernate update when @JoinTable null auto delete join table - Stack Overflow

解决

目前我只能舍弃@JoinTable方式關聯,使用joinColumn來處理。

主錶通過joinColumn關聯進來關聯錶對象,在關聯錶實體中再joinColumn關聯上附錶的信息。

例如數據庫中有博客和標簽錶,還有一個博客標簽關聯錶。
在博客實體中joinColumn關聯進來博客標簽關聯錶,在博客標簽關聯錶實體中關聯進來附錶

那麼就可以在博客實體獲取到它所擁有的的所有標簽的信息,雖然比@JoinTable複雜,但是不會有上面的問題了。


如果你有更好的解决方法, 麻煩評論留言給我。

版權聲明
本文為[滕青山yyds]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201262300425677.html

隨機推薦