Мне нужно моделировать классы User и Role ниже -
User.class
@Entity
@Table(name = "t_user")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String mobile;
@Column(unique = true)
private String email;
@ManyToMany(targetEntity = Role.class, cascade = {CascadeType.PERSIST, CascadeType.DETACH,CascadeType.MERGE,CascadeType.REFRESH} )
@JoinTable(
name="t_user_roles",
joinColumns=
@JoinColumn( name="user_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="role_id", referencedColumnName="id"))
private List<Role> roles;
Role.class
@Entity
@Table(name = "t_role")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
@ManyToMany(targetEntity = User.class, mappedBy = "roles", cascade = {CascadeType.PERSIST, CascadeType.DETACH,CascadeType.MERGE,CascadeType.REFRESH})
private List<User> users;
Теперь, когда я делаю отдельные запросы на публикацию для создания новых пользователей A и B с ролями «user» и «admin» я вижу две записи в таблице «t_user», 4 записи в таблице «t_user_roles» и 4 записи в «t_role» с повторяющимися записями для «пользователь» и «админ». Есть ли способ избежать создания этих повторяющихся записей?
Использование указанных ниже классов контроллера и служб для сохранения объекта User в БД
@RestController
public class UserController{
@Autowired
private UserService service;
@PostMapping("/user/create")
public User addUser(@RequestBody User user){
service.createUser(user);
}
}
public class UserService{
@Autowired
private UserRepository userRepository;
public User createUser(User user) {
userRepository.save(user)
}
}