我有個例子,一個用戶表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()方法。
添加回答
舉報
0/150
提交
取消