Проблема с отложенной загрузкой @ManyToOne: невозможно найти объект по идентификаторуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с отложенной загрузкой @ManyToOne: невозможно найти объект по идентификатору

Сообщение Anonymous »

Изменить
Я добавил атрибут, который может быть проблемой, у него было одно и то же имя столбца в yEntity и xEntity, но он не является частью связи (целое число yEntity в yEntity, которое является ссылкой на другой объект (тот же класс)).
Более того
В отладке я получаю эту ошибку, когда пытаюсь для проверки xEntity

Код: Выделить всё

Method threw 'org.hibernate.exception.GenericJDBCException' exception. Cannot evaluate fr.gouv.isidor.importation.infra.database.entity.themes.ThemeGroupeEntity$HibernateProxy$eChsTNoK.toString()
Основная проблема
Я столкнулся с проблемой отложенной загрузки в приложении Spring Boot. Когда я использую FetchType.LAZY в отношении @ManyToOne, я не могу получить связанный объект и получаю сообщение об ошибке, указывающее, что объект с определенным идентификатором не может быть найден. Однако когда я переключаюсь на FetchType.EAGER, проблема исчезает в той части кода, над которой я сейчас работаю, но нарушает другой ранее реализованный раздел, вызывая ту же ошибку.
Сущности
Вот две сущности, участвующие в этой связи:
XEntity

Код: Выделить всё

@Entity
@Table(name = "x")
public class xEntity{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "nom", nullable = false)
private String nom;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_y", referencedColumnName = "id", nullable = false)
private yEntity yEntity;

// Getters and setters
}

yEntity

Код: Выделить всё

@Table(name = "y")
public class yEntity{

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "theme_groupe_id_generator_seq")
@SequenceGenerator(name = "theme_groupe_id_generator_seq", sequenceName = "theme_groupe_id_seq", allocationSize = 1)
@Column(name = "id", nullable = false)
private Integer id;

@OneToMany(mappedBy = "yEntity", cascade = CascadeType.ALL, orphanRemoval = true)
private List themes;

@Column(name="id_y")
private Integer yEntity;

// Getters and setters
}
Описание проблемы
Когда я пытаюсь получить доступ к yEntity из xEntity с помощью FetchType.LAZY, я получаю следующую ошибку :

Код: Выделить всё

Unable to find fr.gouv.isidor.importation.infra.database.entity.themes.ThemeGroupeEntity with id 4
Что я пробовал
  • Убедитесь, что сеанс открыт использование @Transactional для каждого метода, вызывающего репозиторий.
  • Использование Hibernate.initialize() для принудительной инициализации. Проверено, что
    объект с данным идентификатором существует в базе данных.
  • Проверено с помощью FetchType.EAGER, который работает в текущей части кода, но
    вызывает ошибку та же проблема в другом разделе (в данном случае код работает с LAZY, а не с EAGER).
Для вызова xEntity в первом случае ( кто работает с EAGER и не работает с LAZY) я использую собственный jpa findById(Integer id).
Для вызова xEntity во втором случае (кто работает с LAZY, а не с EAGER) я Я использую nativ jpa findByName(String name).
Как правильно настроить отложенную загрузку для ассоциации ThemeGroupeEntity в ThemeEntity, чтобы избежать этой ошибки? Будем очень признательны за любые идеи или решения.

Подробнее здесь: https://stackoverflow.com/questions/787 ... tity-by-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»