Я использую 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
здесь.