I have the following domain mapping:
@Entity @Table(name = "terminal_admin_role") public class AdminRole { @Id @Column(name = "role_id", nullable = false, unique = true) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id") @SequenceGenerator(name = "user_id", sequenceName = "user_id") private Long adminId; @Column(name = "role") private String role; public AdminRole(String role) { this.role = role; } public AdminRole() { }
and
@Entity @Table(name = "terminal_admin") public class TerminalAdmin { @ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @JoinTable(name = "admin_role", joinColumns = { @JoinColumn(name = "admin_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false) }) private Set<AdminRole> adminRoles;
and the following code to execute:
Controller:
@RequestMapping(value = "/admin/addNewAdmin") public String adminUsers(@ModelAttribute @Valid TerminalAdmin terminalAdmin, BindingResult bindingResult, ModelMap model, Principal principal, HttpSession session) { ... terminalAdmin.setCreateDate(Calendar.getInstance()); terminalAdminService.saveTerminalAdmin(terminalAdmin); ... }
service:
@Override @Transactional public void saveTerminalAdmin(TerminalAdmin newAdmin) { String rawPassword = newAdmin.getPassword(); newAdmin.setPassword(passwordEncoder.encode(newAdmin.getPassword())); terminalAdminDao.save(newAdmin); emailService.sendAdminCreatedEmail(rawPassword, newAdmin.getEmail(), newAdmin.getAdminRoles()); emailService.sendAdminRegisteredForAdminEmail(newAdmin); }
tao:
@Override @Transactional public void save(TerminalAdmin terminalAdmin) { sessionFactory.getCurrentSession().save(terminalAdmin); }
After that, I see that the administrator roles are tied to the user duplicated in the AdminRole table in the database.
How am I wrong? I wrote the equals method.
PS
before saving in debugging, I see the following values:

java spring-mvc hibernate
gstackoverflow
source share