1

有没有办法用 Hibernate 懒惰地加载一个对象(只加载了 id)?

我正在编写一个同步代码,它同步一个巨大的数据库。我们正在尝试对其进行优化,目前的瓶颈是休眠通过慢速连接加载大量不需要的字段。例如:

Person p = createPersonFromOtherDbData(params);
Address a = loadAddressFromLocalDB(p.getAddressParams());
p.setAddress(a);
session.insert(p);

所以基本上,获取那个“Address”对象的“id”并将其放入新的“Person”对象就足够了。然而,hibernate 从 Address 对象加载了许多不需要的字段(在同步上下文中不需要,但在应用程序的其余部分需要)。鉴于会话是无状态的,有什么方法可以优化这部分代码?

同意:

我相信这个问题与:我可以只用 ID 设置实体关系吗?,但它也没有具体的答案。

4

2 回答 2

2

Session.load()完全符合您的要求,主要用于实现您的用例:如果地址尚未加载到会话缓存中,则它仅返回包装 id 的地址代理。

于 2013-10-29T08:02:21.127 回答
0

您可以使用projection从数据库中获取特定字段。这是一个例子:

List results = session.createCriteria(Employee.class)
    .setProjection( Property.forName("name"))
    .list();
于 2013-10-29T07:59:28.560 回答