维护JPA 2.0中的关系

时间:2014-01-29 13:50:43

标签: java hibernate jpa orm jpa-2.0

我已经使用了JPA 2.0一段时间,但,伤心地承认,我还没有足够的时间好好学习。我似乎缺乏如何使用Entity Manager的基础知识。

一次移动一步,我想先问你关于维护映射实体之间的关系。当然,我知道如何在实体之间创建映射,不同类型的可用关联(OneToOne等)以及数据库如何工作。我完全专注于通过Entity Manager维护它,所以请不要向我发送任何类型的一般知识教程: - )。

问题是:

  1. 我是否正确,作为程序员,我负责维护(创建/更新/删除)实体实例之间的关系?
  2. 我是否必须始终手动更新(设置为null,从集合中删除等)实例?
  3. 普通SQL可以在删除时将实体设置为NULL,但似乎JPA不能做这么简单的事情。手动执行它似乎也是一种负担。有没有办法用JPA实现这一目标?
  4. 如果我有OneToMany关系并且在关系的Many侧设置为NULL。然后,我通过在One侧保存实体来保留Set中的更改。那么我是否必须更新Many侧的实体并在每个实例中将关联设置为NULL?对于单向绑定似乎是纯粹的愚蠢!
  5. 提前致谢!

2 个答案:

答案 0 :(得分:0)

您需要调查的主要事项是在实体上映射时的不同选项。例如,在下一段代码中,cascade all选项将指示jpa在删除父级时删除子列表。

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "parent")
private Set<Child> events = new HashSet<Child>();

答案 1 :(得分:0)

  1. 是。您维护对象树并将其修改为看起来像什么 你想要的。
  2. 是和否。如果您希望实体引用null,那么是。 例如,如果您要删除一个实体,那么您应该清理 任何你不是的其他实体对它的任何引用 除去。一个实际的例子:让员工好的做法 知道他/她的经理已经放手了。如果员工要去 留下来,它应该让其经理参考被淘汰或设置 在当前经理被移除之前,向另一位经理 如果该员工也将被删除,则级联删除 可以级联到所有经理的下属,在这种情况下你可以 不需要清理他们对经理的引用 - 就像他们一样 走开了。
  3. 我不太明白SQL设置为null。删除 删除数据库中的行,因此没有任何设置 空值。清理参考不应该是那么困难 对象模型,因为JPA有许多事件可以帮助 preremove preupdate等。最后,问题是 你的java对象。它们只是java对象,所以如果你想要的话 完成的事情,你的应用程序将需要最大限度地完成它 部分。 JPA处理构建它们并将它们推送到数据库, 不改变你的状态。
  4. 是和否。如果设置双向关系,则必须 保持双方如上所述。如果你设置孩子的 父引用null,你应该让父母知道它 有一个孩子更长的时间,不是吗?你的父母会继续 只要父实例存在,就引用它的子进程。所以 即使数据库是通过侧面更新/控制的 拥有一种关系,对象模型将与之不同步 数据库,直到刷新或以某种方式重新加载。 JPA允许 多级缓存,所以这一切都取决于您的提供商设置 Parent实例将存在多长时间引用一个没有的Child 数据库中存在更长的时间。