关于谷歌搜索,可以找到很多东西,但是我还没有找到解决这个问题的可行方法。
基本上,我想按需加载的特定类上有一个很大的CLOB。天真的方法是:
class MyType { // ... @Basic(fetch=FetchType.LAZY) @Lob public String getBlob() { return blob; } }
但是,这不起作用,显然是由于我使用的是oracle驱动程序,即Lob对象没有被视为简单的句柄,而是始终被加载。如此一来,我就被我的尝试所吸引。有一种解决方案使用特殊的工具来进行惰性属性加载,但是由于Hibernate文档似乎表明他们对使它正常工作不感兴趣,因此我不愿意这样做。尤其是必须运行一个额外的编译通道。
因此,我设想的下一个解决方案是将该对象分离为另一种类型,并定义一个关联。不幸的是,尽管文档提供了相互矛盾的信息,但对我来说,很明显,延迟加载不适用于具有共享主键的OneToOne关联。我将关联的一侧设置为ManyToOne,但是我不确定在有共享主键时如何执行此操作。
那么,有人可以建议最好的方法吗?
根据这个唯一的PostgreSQL实现了斑点为真懒。因此,最好的解决方案是将Blob移动到另一个表。您必须使用共享主键吗?你为什么不做这样的事情:
public class MyBlobWrapper { @Id public Long getId() { return id; } @Lob public String getBlob() { return blob; } @OneToOne(fetch=FetchType.LAZY,optional=false) public MyClass getParent() { return parent; } }