gpt4 book ai didi

java - 在 hibernate 中延迟加载一个 clob

转载 作者:太空狗 更新时间:2023-10-29 22:55:55 25 4
gpt4 key购买 nike

谷歌搜索一下可以找到很多相关信息,但我还没有完全找到解决这个问题的可行方法。

基本上,我拥有的是一个特定类的大 CLOB,我想按需加载它。这样做的天真方法是:

class MyType {

// ...

@Basic(fetch=FetchType.LAZY)
@Lob
public String getBlob() {
return blob;
}
}

但这不起作用,显然是因为我使用的是 oracle 驱动程序,即 Lob 对象不被视为简单句柄,但始终被加载。或者说,我的尝试让我相信了。有一种解决方案使用特殊工具进行延迟属性加载,但 Hibernate 文档似乎表明他们对使其正常工作不太感兴趣,所以我宁愿不走那条路。尤其是必须运行额外的编译过程。

因此,我设想的下一个解决方案是将此对象分离为另一种类型并定义一个关联。不幸的是,虽然文档提供了相互矛盾的信息,但对我来说很明显延迟加载不适用于具有共享主键的 OneToOne 关联。我将关联的一侧设置为 ManyToOne,但我不太确定当存在共享主键时如何执行此操作。

那么有人可以建议解决此问题的最佳方法吗?

最佳答案

根据 this只有 PostgreSQL 将 Blob 实现为真正的惰性。所以最好的解决方案是将 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;
}
}

关于java - 在 hibernate 中延迟加载一个 clob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com