懒惰地在hibernate中加载一个对象

时间:2013-10-29 07:52:22

标签: java hibernate optimization lazy-loading

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

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

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

所以基本上,只需获取一个" id"那个"地址"反对并将其放入新的" Person"宾语。但是,hibernate从Address对象加载了许多不需要的字段(在同步的上下文中不需要 ,但在应用程序的其余部分中需要)。有没有办法优化这部分代码,因为会话是无状态的?

Adeed:

我认为这个问题与Can I set an entity relation with just the ID?有关,但它也没有具体的答案。

2 个答案:

答案 0 :(得分:2)

Session.load()完全符合您的要求,主要用于实现您的用例:如果地址未在会话缓存中加载,则它只返回一个包含ID的地址代理。

答案 1 :(得分:0)

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

List results = session.createCriteria(Employee.class)
    .setProjection( Property.forName("name"))
    .list();