首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取“非法访问加载集合”错误

获取“非法访问加载集合”错误
EN

Stack Overflow用户
提问于 2011-10-22 13:59:31
回答 3查看 15.4K关注 0票数 7

当我在没有实现hashcode()toString()的情况下执行我的程序时,它就可以正常工作了。但是,一旦我包括hashcode()toString(),我就会得到这个“非法访问加载集合”错误。

我的hbm文件是

1) booking.hbm.xml

代码语言:javascript
复制
<many-to-one name="userId" class="User" column="user_id"
        insert="true" update="true" cascade="save-update" >
    </many-to-one>
    <many-to-one name="flightId" class="FlightSchedule"
        column="flight_id" cascade="all" not-null="true">
    </many-to-one>

    <set name="passenger" table="passenger79215" lazy="false"
        inverse="true" cascade="save-update">
        <key column="reference_id" />
        <one-to-many class="Passenger" />
    </set>

2) Passenger.hbm.xml

代码语言:javascript
复制
<many-to-one name="referenceid" class="Booking" lazy="false"
        insert="true" update="true" column="reference_id "
        cascade="save-update">
    </many-to-one>

3) User.hbm.xml

代码语言:javascript
复制
<set name="booking" table="bookings79215" lazy="true"
        inverse="false" cascade="save-update">
        <key column="user_id" />
        <one-to-many class="Booking" />
    </set>

有人能解释一下错误吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-22 14:05:02

您的哈希代码和equals方法不能正常工作。确保他们是正确的。toString()与集合类无关,但与哈希代码和等于有关系。

我假设您已经重写了hashcode和equals,而不仅仅是hashcode。

Object#hashCode() (Java Platform SE 7 )

票数 7
EN

Stack Overflow用户

发布于 2011-10-22 14:23:58

我认为您不应该在等于和/或hashCode中使用id字段(由hibernate管理)。

等于和hashCode应该实现为业务逻辑相等。

票数 2
EN

Stack Overflow用户

发布于 2013-09-04 16:32:44

我也犯了同样的错误,但分辨率不同。就像OP一样,我使用Apache的hashcode构建器。我的对象是一对多关系的父母和孩子。子节点将父键作为成员,以便正确设置外键。

问题是,hashcode构建器使用所有成员字段,但是当创建Child时,它的父级还没有完成加载。当hashcode构建器引用时,父成员Hibernate抛出异常,因为父成员仍在加载。

修复方法是将父引用从hashcode的hashCode构建器中排除出来,并等于:

代码语言:javascript
复制
@Override
public boolean equals(final Object obj)
{
    return EqualsBuilder.reflectionEquals(this, obj, "parent" );
}

@Override
public int hashCode()
{
    return HashCodeBuilder.reflectionHashCode(this, "parent" );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7860064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档