Но я не получаю даже партийный идентификатор партии таблицы/объекта в это ленивая загрузка.
Ниже приведено поведение с @ManyToOne (fetch = FetchType.LAZY)
. Обратите внимание, что поведение отличается, когда мы используем аннотации hibernate для полей vs getters.
В классах сущностей вы используете hibernate annotations on the field
. При этом, если вы вызываете даже метод getId(), как в quotation.getParty.getId()
на объекте, он приводит к инициализации прокси-сервера (объекта-участника) и попадает в базу данных для его извлечения. Таким образом, транзакция должна быть активной, если не приведет к метанию lazyinitializationexception
.
Если целью является только получение идентификатора объекта, вы можете разместить спящий режим annotations on the getter methods
. Это не инициализирует прокси-сервер (объекта-участника) для возврата идентификатора и поэтому не требует активной транзакции. Но доступ к любому другому свойству, кроме id, потребует активной транзакции и приведет к попаданию в базу данных.
Посмотрите на соответствующих ошибки в HHH-3718
Таким образом, в вашем партии лица использовать свойство/геттер AccessType вместо доступа к полю. В качестве примера вместо
@Id
@GeneratedValue(...)
private long id;
место их на добытчиках
@Id
@GeneratedValue(...)
public long getId() { ... }
Убедитесь, что вы делаете подобные изменения в других областях Party
лица. Вы можете позже изучить другой вариант использования @Access(AccessType.PROPERTY/FIELD)
вместо этого, чтобы получить тот же эффект.
Переходя к EAGER
Но если изменить тип выборки нетерпеливым, то log.debug() дает мне идентификатор отлично.
Это происходит потому, что FetchType.EAGER
приводит не извлечение сущности партии охотно (без прокси) фронта и поэтому мы можем получить идентификатор и другие свойства партии лица. Обратите внимание, что это приводит к запросу JOIN/extra SELECT на основе конфигурации.
Я не прав ни на что ???
Я не вижу здесь ничего плохого, и все это потому, что тип доступа типа vs getter имеет другое поведение. Таким образом, если вы используете доступ к файловому уровню, Hibernate инициализирует прокси-сервер даже для получения идентификатора связанного объекта в соответствии с bug HHH-3718 или до его разрешения.
и родственная тема на спящем форуме о поле против типа доступа собственности, которые могут представлять интерес Field Vs Property access
Надеются, что это ответ на ваш запрос.
try @ManyToOne (fetch = FetchType.LAZY, optional = false) –
Можете ли вы предоставить код запроса? –
@Eva Mariam: (fetch = FetchType.LAZY, optional = false) не решила проблему. – obsolete