Hibernate Many to Many Relationship to Save only Association in Join Table
23-05-2015If we want to save or update only association table, we shouldn't use cascade in @JoinTable side.
UserGroup Table
@Entity
public class UserGroup {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userGroupId;
@Size(min = 4, max = 20, groups = SizeConstraintGroup.class)
@Column(length = 20)
private String name;
@ManyToMany(fetch = FetchType.LAZY)
@JsonIgnore
@JoinTable(
name = "UserGroup_User",
joinColumns = @JoinColumn(name = "userGroupId", nullable = false, updatable = false),
inverseJoinColumns = @JoinColumn(name = "userId", nullable = false, updatable = false)
)
private List<User> userList=new ArrayList<User>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public int getUserGroupId() {
return userGroupId;
}
public void setUserGroupId(int userGroupId) {
this.userGroupId = userGroupId;
}
}
User Table
@Entity
public class User {
@ManyToMany(fetch = FetchType.LAZY,mappedBy = "userList")
private List<UserGroup> userGroupList = new ArrayList<UserGroup>();
}
Test Class
@RequestMapping(value = "home/addUserGroup", method = RequestMethod.POST)
public ModelAndView addUserGroup(HttpServletRequest request) {
String groupName=request.getParameter("groupName");
String userNames=request.getParameter("userNames");
ModelAndView modelAndView = new ModelAndView("admin/home/addUserGroup");
if(userNames!=null && !userNames.contains(",")){
userNames+=",";
}
if(userNames!=null && groupName!=null){
UserGroup userGroup = new UserGroup();
userGroup.setName(groupName);
String[] userNameList = userNames.split("([,\\s]){1,}");
List<User> userList = new ArrayList<User>();
for (String username : userNameList) {
User user = userService.getUser(username);
userList.add(user);
}
userGroup.setUserList(userList);
userGroupService.saveOrUpdate(userGroup);
modelAndView.addObject("message", "Kullanıcı grubu başarılı bir şekilde eklendi/güncellendi");
modelAndView.addObject("messageType", "success");
}
return modelAndView;
}
After running above code User entity will not be modified, only UserGroup entity and UserGroup_User association table will be updated.