如何限制从SQL查询中获取实体

时间:2009-10-15 09:47:31

标签: sql hibernate entity

SQLQuery query = session.createSQLQuery("select {o.id} from order o " +
        "LEFT JOIN bookings b ON b.id = o.bookingId " +
);
List pusList = query.addEntity(Order.class)
        .list();

按顺序我有:

@OneToOne(cascade = CascadeType.ALL, mappedBy = "order", fetch = FetchType.LAZY)
private Trip trip;

但在执行期间我看到: 拳头,主sql。以及许多这样的查询: 休眠:/ *加载Trip * / select ......

如何拒绝抓取旅行?

更新: 在这种情况下,旅行是没用的。更好的是不要拿它。

2 个答案:

答案 0 :(得分:0)

你正在懒洋洋地抓取这意味着将加载主,然后根据需要进行每次旅行。

一般情况下,请参阅Hibernate performance documents了解可以采取的措施。

由于这是一对一映射,我会将fetch更改为fetch = FetchType.JOIN。这将在main的同时加载行程,而不再向数据库添加行程。

答案 1 :(得分:0)

他们设置的方法是,为了构建您的订单对象,数据库必须查看行程表(如果我正确读取了您的定义,那么'行程中有一个列'顺序' '引用订单的表)。你确定这真的是一对一的关系吗?我不知道您的域名,但通常外键映射到一对多关系,该属性将是旅行或订单中的集合。

请提供有关您的表/关系和相应类的更多信息,尤其是应该包含关系的成员。我认为这给了我们一些更多的信息来解释加载发生的原因以及可以采取哪些措施来避免加载。