Java 在JPA2.0中维护关系
我已经使用JPA2.0有一段时间了,但遗憾的是,我没有足够的时间来正确地学习它。我似乎缺少如何使用实体管理器的基础知识 一步一个脚印,我想先问一下如何维护映射实体之间的关系。当然,我知道如何在实体之间创建映射、不同类型的可用关联(Java 在JPA2.0中维护关系,java,hibernate,jpa,orm,jpa-2.0,Java,Hibernate,Jpa,Orm,Jpa 2.0,我已经使用JPA2.0有一段时间了,但遗憾的是,我没有足够的时间来正确地学习它。我似乎缺少如何使用实体管理器的基础知识 一步一个脚印,我想先问一下如何维护映射实体之间的关系。当然,我知道如何在实体之间创建映射、不同类型的可用关联(OneToOne等)以及数据库通常是如何工作的。我只专注于通过实体管理器对其进行维护,因此请不要将我发送到任何类型的常识教程:-) 问题是: 作为一名程序员,我负责维护(创建/更新/删除)实体实例之间的关系,对吗 我是否必须始终手动更新(设置为null、从集合中删除等)
OneToOne
等)以及数据库通常是如何工作的。我只专注于通过实体管理器
对其进行维护,因此请不要将我发送到任何类型的常识教程:-)
问题是:
OneToMany
关系,并将关系的Many
一侧的实体设置为空。然后通过在One
侧保存实体,将更改持久化到集合中。然后我是否必须更新Many
侧中的实体,并在每个实例中将关联设置为NULL?对于单向绑定来说,这似乎是纯粹的愚蠢李>
提前谢谢 您需要研究的主要问题是在实体上映射时的不同选项。例如,在下一段代码中,cascade all选项将指示jpa在删除父列表时删除子列表
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "parent")
private Set<Child> events = new HashSet<Child>();
@OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.ALL},mappedBy=“parent”)
private Set events=new HashSet();
如果该员工也将被解雇,则级联删除 可以级联到经理的所有下属,在这种情况下,您可以 不需要清理他们对经理的引用-因为他们是这样的 我也要走了
在第4点中,我想问以下问题:我想删除
父实体和它的子实体之间的链接。在我的代码中,我获取父项
,并清除将子项设置为空集
。然后我保存父项
。对我来说,这应该足够了,但是如何正确清理链接的另一面呢?我是否应该首先迭代子级,将parent
设置为null
和em.persist(child)
?我会想象em
聪明到足以理解我所做的事情并自动清理那些引用!你能详细说明一下吗?这取决于你想发生什么。如果没有父级的子级不应存在,请将其与新父级关联,或设置孤立删除标志,JPA将在取消引用子级时删除这些子级。如果你想让他们独立存在,你需要告诉他们他们的当前状态应该是什么,当然,合并它。某些提供程序(EclipseLink)可能仍然有遗留的EJB2.0代码,可以为您处理另一端的空值。这种关系维护造成的问题超出了它的价值,并且被故意从JPA规范中排除。如果对每个被修剪的子级调用merge是一个问题,那么可以使用许多方法。一个简单的方法是将修剪过的对象存储在一个未持久化的集合中,然后在父对象上的preupdate事件方法中使用该集合。此方法将根据需要进行列表修复和合并。