Весенние данные, JPA @ManyToOne ленивая инициализация не работает

Я знаю, что есть много подобных вопросов об этой беде, но ничего не работает для меня.

Я @ManyToOne отношения между Aim и Пользователем.

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id", nullable = false, updatable = false)
private User user;

и

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Collection<Aim> userAims;

соответственно.

@Override
@Transactional(propagation = Propagation.REQUIRED)
@PreAuthorize("isAuthenticated() and principal.user.isEnabled() == true")
public Aim findById(String aimId) throws NumberFormatException, EntityNotFoundException {
    Aim aim = null;
    try {
        aim = aimRepository.findOne(Long.parseLong(aimId));
    } catch (NumberFormatException e) {
        throw new InvalidDataAccessApiUsageException(e.getMessage(), e);
    }
    if (aim == null) throw new EntityNotFoundException("Aim with id: " + aimId + " not found!");
    return aim;
}

@OneToMany ассоциации отлично работают с ленивой выборкой. Метод не вложен в другое @Transactional метод @Transactional строительство штраф.

enter image description here

enter image description here

таким образом, запись существует.

  1. классы пользователей и цель не финал и реализовать сериализуемые
  2. некоторые источники советуют поставить аннотации на геттеров. Он также не работа.
  3. @Fetch (FetchMode.SELECT) такая же ситуация =
  4. запрос через спящий режим результаты те же, но запрос HQL с левое соединение fetch работает отлично
  5. мой FK ПРИ ОБНОВЛЕНИИ КАСКАДА НА INSERT CASCADE
  6. необязательно = false тоже пробовал...

обратите внимание что у меня нет LazyInitException



спасибо заранее!

1 ответов


Я предполагаю, что код findById метод, и по ссылке на "ленивая инициализация не работает" в заголовке, что вы хотите найти Aim объект по его числовому идентификатору, а также связанный