Spring JPA - org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет сеанса - PullRequest
0 голосов
/ 17 октября 2019

Я использую Spring JPA для запроса списка объектов JPA (скажем, B), который имеет отношение к другому объекту (скажем, A) с отложенной выборкой. JPQL для фильтрации на основе лениво загруженного объекта выдает исключение Вызвано: org.hibernate.LazyInitializationException: не удалось инициализировать прокси-сервер - нет исключения Session. Как решить эту проблему?

Я пытался использовать атрибуты JOIN, FETCH, LEFT JOIN и @EntityGraph. Я не смог получить ожидаемый результат.

@Entity
public class B {
    ...
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "A_Id", referencedColumnName="id", nullable = false)
    private Parent parent;
    ...
}

public interface BRepository extends PagingAndSortingRepository<B, Integer> {

    ...
    @Query("SELECT b FROM B b join fetch b.parent p where p.id = :parentId")
    List<B> findBsByParent(@Param("parentId") int parentId);
    ...
}

@Service
public class MyService {
   @Autowired
   private BRepository bRepository;

   public void workFunc(int parentId) {
      List<B> bList = bRepository.findBsByParent(parentId);
      ...
      // do certain ops with bList and other stuff too
      ...
   }
}

Я ожидаю, что метод findBsByParent должен вернуть все B, которые дали parentId. К сожалению, я не смогу использовать native query здесь.

1 Ответ

0 голосов
/ 18 октября 2019

Добавьте следующее свойство в ваш application.properties файл:

hibernate.enable_lazy_load_no_trans = true
...