Hibernate session.load не заполняет свойство arraylist объекта - PullRequest
3 голосов
/ 16 марта 2012

У меня проблема с использованием функции session.load в hibernate. Я пытаюсь получить объект в соответствии с идентификатором, и он возвращает хороший объект, но в экземпляре установлены только примитивные свойства. У меня есть свойство с набором (сопоставленным с другим объектом), но оно не восстанавливается после набора, и поле набора имеет значение null.

Кто-нибудь знает, почему выборка не работает должным образом?

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 марта 2012

Я думаю, что набор загружен лениво, если вы хотите, чтобы он был заполнен, вы можете просто вызвать получатель этого набора, и он будет загружен.Если вы хотите, чтобы он загружался постоянно, вы можете добавить

fetch = FetchType.EAGER

пример:

@OneToMany(mappedBy = "program", fetch=FetchType.EAGER)
private final List<Instruction> instructions = new ArrayList<Instruction>();

в отображение вашей сущности

0 голосов
/ 18 марта 2012

Если вы не уверены на 100%, вы всегда будете хотеть, чтобы дети загружались, установка EAGER выборки может привести к нежелательным эффектам.Инструменты JBoss по умолчанию устанавливают выборку LAZY.

Вместо этого вам нужно инициализировать дочернюю ассоциацию, что можно сделать различными способами:

  1. Hibernate.initialize(myObject.getChildren())
  2. Вызовите size для ассоциации: myObject.getChildren().size()
  3. В запросе Criteria установите FetchMode для ассоциации на JOIN: criteria.setFetchMode("children", FetchMode.JOIN);
0 голосов
/ 16 марта 2012

Проверьте вашу стратегию получения на ORM. Некоторые свойства могут быть установлены как ленивые, а не нетерпеливые. Возможно, вам придется использовать Hibernate.Initialize после загрузки, чтобы заполнить все свойства. В противном случае вам придется изменить ORM, чтобы использовать загрузку. Используя аннотации, вы должны установить следующее свойство после атрибута @entity, чтобы отключить lazy по умолчанию:

@org.hibernate.annotations.Proxy (lazy = false)

Однако при загрузке все будет загружено.

...