Там можно многое узнать по этому вопросу, но я не нашел эффективного решения этой проблемы.
В принципе, у меня есть большой CLOB для определенного класса, который я хочу загрузить по требованию. Наивный способ сделать это:
class MyType {
// ...
@Basic(fetch=FetchType.LAZY)
@Lob
public String getBlob() {
return blob;
}
}
Это не работает, по-видимому, из-за того, что я использую драйверы oracle, т.е. объекты Lob не рассматриваются как простые дескрипторы, но всегда загружаются. Или так мне верили из моих набегов. Существует одно решение, которое использует специальные инструменты для загрузки ленивых свойств, но, как показывают документы Hibernate, они менее заинтересованы в правильном выполнении этой работы, поэтому я предпочел бы не идти по этому маршруту. Особенно с необходимостью запуска дополнительного компиляционного прохода и всего.
Итак, следующее решение, которое я предполагал, это отделить этот объект от другого типа и определить связь. К сожалению, хотя документы дают противоречивую информацию, мне кажется, что ленивая загрузка не работает с ассоциациями OneToOne с общим первичным ключом. Я установил бы одну сторону ассоциации как ManyToOne, но я не совсем уверен, как это сделать, когда есть общий первичный ключ.
Так может ли кто-нибудь предложить лучший способ сделать это?