Несколько представлений одной и той же сущности в SpringBoot 2.0.4 - PullRequest
0 голосов
/ 25 августа 2018

У меня есть базовое приложение SpringBoot 2.0.4.RELEASE.используя Spring Initializer, JPA, встроенный Tomcat, шаблонизатор Thymeleaf и пакет в качестве исполняемого файла JAR.

У меня есть объект User с ролями:

@Entity
@Table(name="t_user")
public class User implements Serializable, UserDetails {


 @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(
        name="t_user_role",
        joinColumns=@JoinColumn(name="user_id", referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="role_id", referencedColumnName="id"))
    private Set<Role> roles = new HashSet<>();
..
}

Когда я запускаю приложение.Я создаю все роли:

roleService.save(new Role(RolesEnum.USER.getRoleName()));
roleService.save(new Role(RolesEnum.ADMIN.getRoleName()));

Затем я создаю пользователя с ролью USER:

User user1 = new User();


         Role role = roleService.findByName(RolesEnum.USER.getRoleName());

         user.getRoles().add(role);
          userService.save(user);

, но когда я создаю другого пользователя с той же ролью:

User user2 = new User();


         Role role = roleService.findByName(RolesEnum.USER.getRoleName());

         user2.getRoles().add(role);
          user2Service.save(user);

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

Multiple representations of the same entity [com.tdk.backend.persistence.domain.backend.Role#1] are being merged. Detached: [com.tdk.backend.persistence.domain.backend.Role@5295d3de]; Detached: [com.tdk.backend.persistence.domain.backend.Role@2b3d9d32]

В объекте Role у меня нет объявленных полевых пользователей, поскольку я не получу всех пользователей на основе роли

1 Ответ

0 голосов
/ 26 августа 2018

По моему мнению, вы использовали cascade = CascadeType.MERGE для объекта Role.Пожалуйста, удалите, и это решит проблему.

...