重新启动后首先加载持久对象的列表

时间:2012-05-10 02:15:25

标签: jpa persistence one-to-many

  

班级名单{
  @OneToMany(targetEntity = ShoppingItemStatus.class,   cascade = CascadeType.ALL,fetch = FetchType.LAZY)
  private List items = new ArrayList();

     

}

您好,

我正在使用Eclipse Link和Glassfish,我有一个非常恼人的错误。

  1. 我坚持一个对象
  2. 我正在读出对象列表(包括新对象)
  3. 新对象的“项目”不包含任何项目
  4. 然后我重启服务器:

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

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

    我很茫然 提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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启用共享缓存。当你重新读取它来自缓存的对象时,你仍然拥有你坚持的状态。

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

您可以随时禁用共享缓存以避免此问题,但仍需要修复代码。