java - Hibernate:部分延迟初始化?

标签 java hibernate

我有一个多对多关联定义如下:

Parent.hbm.xml:

    <set name="children" table="child_parent_map" lazy="true">
        <cache usage="nonstrict-read-write" />
        <key column="parent_id" />
        <many-to-many class="Child">
            <column name="child_id" not-null="true" index="child_parent_by_child"/>
        </many-to-many>
    </set>

child .hbm.xml:

    <set name="parents" table="child_parent_map" lazy="true">
        <cache usage="nonstrict-read-write" />
        <key column="child_id" />
        <many-to-many column="parent_id" class="Parent"  lazy="false"/>
    </set>

非常确定我正在通过遍历集合来初始化Parent.children。像这样的东西:

for(Child child : parent.getChildren()) {
    Hibernate.initialize(child.getAnotherProperty());
}

parent 有六个 child 。但是,在一个 session 中,父级似乎只有五个,而在另一个 session 中(2 秒后,数据库或另一个 session 中没有任何变化)——所有六个。实际上,我是在使用自定义克隆器将这些实体从 session 中分离出来后发现的。

我认为惰性集合要么完全初始化(即所有元素都是),要么没有。是否有可能以某种方式仅初始化了集合的一部分?缓存有问题吗?

编辑:该 session 处理相当大的数据集(几千个实体)。这是否可能是因为一些已加载的实体从 session 中被逐出?

最佳答案

首先检查您的 hashCode()equals() 方法,这些方法的不正确实现通常会导致这种行为。

关于java - Hibernate:部分延迟初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5199978/

相关文章:

java - 使用 hibernate 更新 mysql 数据库时锁定行

hibernate - 插入前进行两次选择查询而不是一次

spring - 无法让 c3p0 与 Spring/Hibernate/JPA 一起使用

java - 查看 ListView 内容时出现问题

java - String.split() 的副作用,还是正则表达式错误?

java - .properties 文件何时加载到 JBoss 上?

java - Hibernate列同时用作复合主键的一部分和复合外键的一部分

java - 对 child 有限制的 hibernate 标准

Java序列化过程中同一对象字段的多个json名称

java - 使用 Java 将 XML 数据发布到 API 时出现问题