У меня есть проблема с транзакцией в Spring MVC. У меня есть 2 объекта (User, Role) в ManyToMany. У меня есть сервис, где я хочу, чтобы получить Роли пользователя:Транзакция не работает во многих многих
public Set<Role> getUserRoles(long id) {
Set<Role> roles = userRepository.findById(id).getRoles();
return roles;
}
Мой класс Пользователь:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USER_ROLE", joinColumns = {
@JoinColumn(name = "ID_USER", referencedColumnName = "ID_USER") }, inverseJoinColumns = {
@JoinColumn(name = "ID_ROLE", referencedColumnName = "ID_ROLE") })
public Set<Role> getRoles() {
return roles;
}
Когда я использую это в моем контроллере:
Set<Role> roles=userService.getUserRoles(1);
for (Role r : roles) {
System.out.println(r.getName());
}
я получил LazyInitializationException. Сервис обозначен как @ Трансакция и метод
TransactionSynchronizationManager.isActualTransactionActive()
в сервисе метод возвращает true.
public Set<Role> getUserRoles(long id) {
Set<Role> roles = userRepository.findById(id).getRoles();
for (Role r : roles) {
System.out.println(r.getName());
}
return roles;
}
Я заметил, что когда я печатаю роли в обслуживании, мой контроллер работает. Спасибо за любую помощь
EDIT
В контроллере у меня есть код:
for (Role r : roles) {
System.out.println(r.getName());
}
Когда мой метод обслуживание:
public Set<Role> getUserRoles(long id) {
Set<Role> roles = userRepository.findById(id).getRoles();
return roles;
}
затем System.out.println (UserService .getUserRoles (1)); в контроллере бросок LazyInitializationException но когда мой метод обслуживания:
public Set<Role> getUserRoles(long id) {
Set<Role> roles = userRepository.findById(id).getRoles();
for (Role r : roles) {
System.out.println(r.getName());
}
return roles;
}
затем System.out.println (userService.getUserRoles (1)); в контрольных работах
вы объясняете, когда это работает, но не тогда, когда оно не работает, а также не то, что «не работает» означает, в частности (что происходит, что должно произойти, журналы ошибок) – hoijui
i обновил мое сообщение – cinek181992