java - hibernate 缩小延迟加载集合范围

标签 java hibernate orm lazy-loading

我有两门课:

public class Car {
    private Integer id;
    private List<CarOrder> carOrders;
}

public class CarOrder {
    private Car car;
    private Long endDate;
    private Long id;
}

和 hibernate 映射

<class entity-name="car" name="test.es.Car" table="CARS" schema="ARK_ES">
        <cache usage="read-write"/>
        <id name="id" column="ID">
            <generator class="sequence">
                <param name="sequence">ES_SEQUENCE</param>
            </generator>
        </id>
        <bag name="carOrders" inverse="true" lazy="true">
            <cache usage="read-write"/>
            <key column="CAR_ID"/>
            <one-to-many not-found="ignore" entity-name="carOrder"/>
        </bag>
    </class>
    <class entity-name="carOrder" name="temp.es.CarOrder" table="CAR_ORDERS" schema="ARK_ES">
        <cache usage="read-write"/>
        <id name="id" column="ID">
            <generator class="sequence">
                <param name="sequence">ES_ORDER_SEQUENCE</param>
            </generator>
        </id>
        <property name="endDate" column="END_DATE"/>
        <many-to-one name="car" entity-name="car">
            <column name="CAR_ID"/>
        </many-to-one>
    </class>

我需要加载 endDate 大于某个值的所有汽车和汽车订单。我还需要缓存汽车订单的查询。我尝试使用 hibernate 过滤器,但它们没有被缓存。是否可以使用 hibernate api 无需自定义查询来实现此目的? 忘了说了,车可以没有订单,但一定有结果。

谢谢。

最佳答案

因此您可以在集合类上使用 @fitler 和 @filterdef 注释。但在 session 中启用过滤器非常重要。请点击此链接了解如何启用过滤器,默认情况下不启用它们。 How to enable hibernate filter for sessionFactory.getCurrentSession()?

关于java - hibernate 缩小延迟加载集合范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303077/

相关文章:

java - 接收 JSON 并将其转换为对象的最佳实践

java - 通过 hibernate 删除对象并且失败

sql - 外部事务失败时回滚内部事务

php - Laravel 使用相同的值更新 mysql 字段

java - org.hibernate.Criteria 一堆扩展 org.hibernate.internal.CriteriaImpl 的 add(Restrictions)

mysql - 使用sequelize插入mysql中的两个依赖表

java - Akka Persistence Maven 协调最新稳定版本?

java - request.getParameter() 不存在时表示其为 null

java - 如何在 Mac 上安装 Java 8

java - Hibernate:java.lang.String无法转换为java.math.BigDecimal