Весенняя загрузка JPA многие ко многим с дополнительной вставкой столбца и проблемой обновления - PullRequest
0 голосов
/ 24 октября 2018

Вот мой первоначальный вопрос.

Spring Data JPA «Многие ко многим» с дополнительным столбцом «Пользователь и роли»

Теперь у меня есть нужные таблицы, но я могуt заставить его работать для обновления.

Вот код:

User.java

@Entity
@Table(name = "users")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String username;

  @OneToMany(mappedBy="user", cascade = CascadeType.ALL, orphanRemoval = true,  fetch = FetchType.LAZY)
  private List<UserRole> roles;
  // getters and setters
}

Role.java

@Entity
@Table(name = "roles")
public class Role {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;
  // getters and setters
}

UserRole.java

@Entity
@Table(name = "users_to_role")
public class UserRole  implements Serializable {

  @Id
  @ManyToOne
  @JoinColumn(name = "user_id")
  private User user;

  @Id
  @ManyToOne
  @JoinColumn(name = "role_id")
  private Role role;

  private Date createdAt;

  public UserRole(){}

  public UserRole(User user, Role role, Date date) {
    this.user = user;
    this.role = role;
    this.createdAt = date;
  }

  // getters and setters
}

Контроллер

@RestController
public class APIController {

  @Autowired
  RoleRepository roleRepository;

  @Autowired
  UserRepository userRepository;


  @ResponseBody
  @RequestMapping(value = "create", method = RequestMethod.GET)
  public String create(){

    //Insert test - WORKING BUT NOT SURE IF ITS RIGHT WAY
    List<UserRole> userRoles = new ArrayList<>();
    Role role = roleRepository.getOne((long) 1);

    //Create user
    User user = new User();
    user.setUsername("test");

    //Create userRole
    userRoles.add(new UserRole(user, role, new Date()));
    user.setRoles(userRoles);

    userRepository.save(user);

    return "created";

  }



  @ResponseBody
  @RequestMapping(value = "edit", method = RequestMethod.GET)
  public String edit(){

    //Edit test - NOT working
    List<UserRole> userRoles = new ArrayList<>();

    Role role = roleRepository.getOne((long) 2);

    //get user from db
    User user = userRepository.getOne((long) 1);

    //Create userRole
    userRoles.add(new UserRole(user, role, new Date()));

    // WAS FIRST ATTEMPT using user.setRoles(userRoles); but got error and use
    ///5414721/na-kollektsiy-s-cascade-all-delete-orphan-bolshe-ne-ssylalsya-ekzemplyar-vladelets
    //user.setRoles(userRoles);

    user.getRoles().clear();
    user.getRoles().addAll(userRoles);


    userRepository.save(user);

    return "done";
  }
}

Я получаю эту ошибку:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: столбец user_id не может быть пустым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...