0

代码

类列表{
@OneToMany(targetEntity=ShoppingItemStatus.class, cascade=CascadeType.ALL,fetch = FetchType.LAZY)
私有列表项 = new ArrayList();

}

你好,

我正在使用 Eclipse Link 和 Glassfish,我遇到了一个非常烦人的错误。

  1. 我坚持一个对象
  2. 我正在读出对象列表(包括新对象)
  3. 新对象的“项目”不包含任何项目

然后我重新启动服务器:

所有项目都正确包含。我无法真正理解这个错误,因为在第 2 步中。ShoppingItemStatus 和列表之间的表中的数据是存在的。

我正在搜索两天,更改我的实体中的每个配置和注释。

我不知所措提前感谢您的帮助!

4

1 回答 1

0

我的猜测是当你没有更新关系的双方时。因为您从不添加 OneToMany,所以当您重新阅读它时它是空的。你需要维护双方的关系。

见, http ://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

默认情况下,EclipseLink 启用共享缓存。当您重新读取来自缓存的对象时,您仍然具有您坚持的状态。

即使没有共享缓存,您也会在单个实体管理器/事务中遇到此问题。

您始终可以禁用共享缓存以避免该问题,但您仍然需要修复您的代码。

于 2012-05-10T14:11:12.287 回答