|
hibernate. Не работает FetchType.LAZY при NotFoundAction.IGNORE
#38950677
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Харьков
Сообщения: 752
|
|
Изучаю hibernate. У меня есть такая сущность:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
@Entity
@Table(name ="foo_tbl")
Class Foo{
...
@OneToOne(fetch = FetchType.LAZY, optional = true)
@LazyToOne(LazyToOneOption.PROXY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name="next_item", unique = true, nullable = false)
@Fetch(FetchMode.SELECT)
Foo getNext(){return nxt;}
...
}
В таблице хранятся однонаправленые очереди из элементов Foo. Причем, колонки там объявлены как NOT NULL. Просто в какой-то момент next_item указывает на несущестувующий итем.
Допустим, весь список нам ненужен никогда. Допустим, когда мы бежим по списку через getNext() и упираемся в конец списка - нам надо, чтобы очередной getNext() вернул null.
У меня не получается совместить ленивое извлечение элементов (смотрю по логу mysql) с отдачей null вконце спика. В таком виде, как я привел код - по факту вижу, что нету ленивого извлечения (длина очереди - около 10 элементов - и я вижу 10 запросов). Если убрать аннотацию @NotFound(action = NotFoundAction.IGNORE), то ленивое извлечение начинает работать, но перестает работать null в этом поле, и вместо него бросается ObjectNotFoundException при достижении конца очереди. Флажок optional я пробовал ставить по-разному. Это не помогает.
Для меня сейчас это выглядит как баг, т.к. внятного объяснения такого поведения я не вижу. Но тот факт что с хибернейтом я разбираюсь первый вечер, не позволяет так вот сразу сказать что это есть баг. Есть большое подозрение, что внятное объяснение все же есть(хотя гугл ничего не знает)
Как такое сделать?
|
|
|