gpt4 book ai didi

java - 批量获取hibernate映射对象

转载 作者:行者123 更新时间:2023-12-02 07:01:26 26 4
gpt4 key购买 nike

我想从数据库中批量获取多个 Hibernate 映射对象。据我所知,Hibernate(或我所知道的任何 Java ORM)目前不支持这一点。因此我使用 RMI 编写了一个实现此 API 的驱动程序:

interface HibernateBatchDriver extends Remote
{
Serializable [] execute (String [] hqlQueries) throws RemoteException;
}

此 API 的实现针对本地数据库打开一个 Hibernate session ,逐一发出查询,对结果进行批处理,然后将其返回给调用者。这样做的问题是,所获取的对象在发送回后不再附加任何Session,因此稍后从此类对象访问延迟获取的字段最终会出现无 session 错误。这个问题有解决办法吗?我不认为 Session 对象是可序列化的,否则我也会通过网络发送它们。

最佳答案

正如 @dcernahoschi 提到的,Session 对象是Serialized,但 JDBC 连接不是。可序列化意味着您将某些内容保存到文件中,稍后您读取它并且它是同一个对象。您无法将 JDBC 连接保存到文件,并稍后从该文件恢复它。您应该必须打开一个新的 JDBC 连接。

因此,即使您可以通过 RMI 发送 session ,您也需要远程计算机中的 JDBC 连接。但是,如果可以在远程计算机中设置 session ,那么为什么不在该计算机中执行查询呢?

如果你想通过RMI发送查询结果,那么你需要做的是获取整个对象,而不是延迟获取。为此,您必须将所有关系定义为在映射中急切获取。

如果您无法将映射更改为 eager,那么还有一种替代方法来获取每个对象的“深层”副本并通过 RMI 发送该对象。创建对象的深拷贝需要一些努力,但如果您无法将映射更改为急切获取,那么这是唯一的解决方案。这种方法意味着您的接口(interface)方法必须更改为:

List[] execute (String [] hqlQueries) throws RemoteException;

方法结果中的每个列表都会保留一次查询获取的结果。

关于java - 批量获取hibernate映射对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16620445/

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