1
CRUDコントローラを設計しようとしていますが、ここでは挿入と削除操作は完全に機能しますが、更新は機能しません。更新のために提出すると、ユーザーテーブルのみが更新されますが、ロールテーブルは更新されません。Hibernate多対多リレーショナルテーブルで更新が動作しない
User.java
@Entity
@Table(name="users")
public class User implements UserDetails {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
private Long id;
@Column(length = 128, nullable = false)
private String firstName;
@Column(length = 128, unique = true, nullable = false)
private String email; // required; unique
@Column(unique = true, nullable = false, length=128)
private String name;
@Column(length = 128, nullable = false)
private String password; // required
@Column
private boolean enabled;
@JsonBackReference
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(
name = "company_user",
joinColumns = @JoinColumn(name = "userId"),
inverseJoinColumns = @JoinColumn(name = "companyId")
)
private Set<Company> companies = new HashSet<Company>();
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "userId", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name = "roleId", referencedColumnName="id")
)
private Set<Role> roles = new HashSet<Role>();
Role.java
@Entity
public class Role extends BaseObject {
@Column(length = 64)
private String description;
UserController.java
@PostMapping("/saveUser")
public void save(@ModelAttribute User user, BindingResult bindingResult, HttpServletRequest req, HttpServletResponse rsp) throws IOException {
user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
// LOGGER.info("--------------role User ID----------" + user.getRoles());
user.setRoles(user.getRoles());
userService.registerUser(user);
req.setAttribute("users", userService.findAllUsers());
req.setAttribute("mode", "USER_VIEW");
rsp.sendRedirect("showUser");
}
**UserService.Java**
public User registerUser(User user) {
Optional<User> exists = userRepository.findOneByName(user.getName());
return exists.isPresent() ? userRepository.save(exists.get().merge(user))
: userRepository.save(user);
}
どのようにすることができovercomこの状況?
私は 'user.setRoles(user.getRoles());';という行を本当に理解できません。ユーザーエンティティに「新しい」ものを追加することはありません –