Не удается заставить FetchType.EAGER работать с @ElementCollection - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующие аннотации к переменной:

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "question_translation",
                 foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_question_translation_question"),
                 joinColumns = @JoinColumn(name = "question_id"))
@MapKeyColumn(name = "language", nullable = false)
@MapKeyEnumerated(EnumType.STRING)
@Column(name = "translation", nullable = false)
private Map<Language, String> translations;

Когда я делаю translations.get(Language.EN) вне @Transactional, я получаю: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

Версии:

spring boot: <version>2.0.3.RELEASE</version>
<hibernate.version>5.2.17.Final</hibernate.version>
<hibernate-jpa-2.1-api.version>1.0.2.Final</hibernate-jpa-2.1-api.version>

Чего мне не хватает?

Редактировать:

После поиска немного дальше, я думаю, что проблема в том, что я использую данные Spring и их репозитории... Кажется, они игнорируют тип извлечения ...

1 Ответ

0 голосов
/ 28 ноября 2018

Я знаю, что не так: spring-data игнорирует типы выборки до тех пор, пока вы не укажете аннотацию @EntityGraph как для метода в репозитории, так и для сущности.

Часть f * cked, которую вы не можете переопределитьметод из JpaRepository и добавьте к нему @EntityGraph, потому что он игнорируется.

Вам нужно написать свои собственные методы в своем хранилище ... например:

@EntityGraph(value = "graphNameDefinedOnEntity", type = EntityGraph.EntityGraphType.LOAD)
QuestionEntity getById(Long id);

Это сильно противоречитgetOne(Long id) предоставлено JpaRepository.Очень запутанно.Поэтому может быть лучше просто назвать его getByIdEagerlyLoaded и написать запрос самостоятельно с помощью @Query annotation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...