Java 覆盖hibernate映射文件中相关实体的延迟加载设置

Java 覆盖hibernate映射文件中相关实体的延迟加载设置,java,hibernate,overriding,lazy-loading,Java,Hibernate,Overriding,Lazy Loading,我有一个映射文件,它为一些相关实体设置了lazy=false。这对于很多用例都是有意义的,但也有一些例外。问题是我不想在查询时获取这些案例的相关关联,这在时间上非常昂贵 实体的映射示例 <class name="Category" table="category"> <id name="id" type="string"> <column length="50" name="id"/> <generator class="

我有一个映射文件,它为一些相关实体设置了
lazy=false
。这对于很多用例都是有意义的,但也有一些例外。问题是我不想在查询时获取这些案例的相关关联,这在时间上非常昂贵

实体的映射示例

<class name="Category" table="category">
    <id name="id" type="string">
      <column length="50" name="id"/>
      <generator class="uuid"/>
    </id>
    <property name="name" type="string">
      <column length="100" name="name" not-null="true"/>
    </property>
    <set inverse="true" lazy="false" name="categorySourcesList">
      <key>
        <column length="50" name="categoryid" not-null="true"/>
      </key>
      <one-to-many class="CategorySource"/>
    </set>
  </class>


我的问题是,有没有一种方法可以覆盖映射文件中设置的
lazy
值,或者是在
sql查询中,或者是在DAO中启用lazy load作为参数之一?或者通过一些注释?

AFAIK您不能用LAZY覆盖急切的加载,但只能反过来


因此,您需要定义延迟关联,并在使用联接的查询中覆盖该关联。可能还有其他方法可以做到这一点,但恐怕我现在只知道这些。

是的,您可以覆盖带注释或xml映射的关联获取策略

这将返回一个
MyClass
的实例,并急切地获取其子对象

    Criteria criteria = session().createCriteria(MyClass.class);
    criteria.add(Restrictions.eq("id", "1234"));        
    criteria.setFetchMode("children",FetchMode.EAGER);
    return (MyClass) criteria.uniqueResult();