第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

hibernate的many to many的關(guān)聯(lián)修改時為什么對中間表都是先刪除再插入呢?

hibernate的many to many的關(guān)聯(lián)修改時為什么對中間表都是先刪除再插入呢?

胡子哥哥 2019-02-18 04:28:20
我有個例子,一個用戶表user,一個角色表role,他們之間建立many to many的關(guān)聯(lián),修改關(guān)聯(lián)屬性時都是先刪除所有關(guān)聯(lián)數(shù)據(jù),再插入最新的,這樣效率不是很低么,怎樣才能只修改變化的。 user實體的定義如下: @Entity @Table(name="sys_user") public class SysUser extends BaseEntity implements Serializable{ private static final long serialVersionUID = -6336110168482446523L; @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(unique=true, nullable=false, length=30) private String username; @Column(nullable=false) private String password; @Column(nullable=false) private String status = "1"; @ManyToMany(fetch= FetchType.LAZY) @JoinTable(name = "sys_user_role", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName ="id") }, inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName ="id") } ) private List<SysRole> roleList; //set get方法省略 } 當(dāng)我修改用戶的角色時: SysUser user = sysUserService.findOne(id); List<SysRole> roleList = sysRoleService.findAll(ids); user.setRoleList(roleList); sysUserService.save(user); 后臺執(zhí)行的sql如下: Hibernate: delete from sys_user_role where user_id=? Hibernate: insert into sys_user_role (user_id, role_id) values (?, ?) Hibernate: insert into sys_user_role (user_id, role_id) values (?, ?) 為何不直接update,而是先刪除在插入,這樣效率不是很低么。是不是如果在一個事物中這樣的效率差異可以忽略了。
查看完整描述

1 回答

?
交互式愛情

TA貢獻1712條經(jīng)驗 獲得超3個贊

1、將 List<SysRole> roles改為Set<SysRole> roles。
2、重寫主表實體類的equals()和hasCode()方法。

查看完整回答
反對 回復(fù) 2019-03-01
  • 1 回答
  • 0 關(guān)注
  • 598 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號