0
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。和许多这样的查询: Hibernate: /* load Trip */ select......

我如何才能获取 Trips?

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

4

2 回答 2

0

您正在懒惰地获取,这意味着将加载主要内容,然后根据需要进行每次行程。

一般看Hibernate 性能文档,看看能做什么。

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

于 2009-10-15T10:06:27.507 回答
0

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

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

于 2009-10-15T16:04:25.337 回答