谷歌搜索一下就能找到很多相关信息,但是我还没有找到一个可行的解决方案。
基本上,我有一个大的CLOB在一个特定的类上,我希望它能够按需加载。最朴素的做法是:
class MyType {
// ...
@Basic(fetch=FetchType.LAZY)
@Lob
public String getBlob() {
return blob;
}
}
然而这并不起作用,显然是因为我正在使用 Oracle 驱动程序,即 Lob 对象并不被视为简单的句柄,而是始终被加载。或者说,从我的尝试中我被引导相信了这一点。有一种解决方法使用特殊的工具来实现懒加载属性,但是由于 Hibernate 文档似乎表明他们对使其正常工作不太感兴趣,所以我不想走这条路。尤其是需要运行额外的编译过程。
因此,我设想的下一个解决方案是将此对象分离到另一个类型中并定义一个关联。不幸的是,尽管文档提供了冲突的信息,但很明显对我来说,共享主键的 OneToOne 关联没有启用懒加载。我会将关联的一侧设置为 ManyToOne,但是当存在共享主键时,我不太确定如何操作。
那么,有人能否建议最佳方法?