Java 如果在关系中使用实体属性,如何更新该属性?

Java 如果在关系中使用实体属性,如何更新该属性?,java,jpa,Java,Jpa,实体的持久化、更新和删除可以通过@Pre/PostPersist、@Pre/PostUpdate和@Pre/PostDeleteJPA注释进行跟踪。如果某个实体属性已在关系中使用,即另一个实体已将其用作关系字段的值或添加到关系集合中,我希望更改该实体属性 使用@PrePostLoad很困难,因为很难排除与关系中的用法无关的加载 我想使用pura JPA/提供商便携解决方案,但我对特定于提供商的解决方案也很好奇 具体的想法是让用户在表单中创建并保留实体(例如联系人信息的实例),然后将它们与在另一表

实体的持久化、更新和删除可以通过
@Pre/PostPersist
@Pre/PostUpdate
@Pre/PostDelete
JPA注释进行跟踪。如果某个实体属性已在关系中使用,即另一个实体已将其用作关系字段的值或添加到关系集合中,我希望更改该实体属性

使用
@PrePostLoad
很困难,因为很难排除与关系中的用法无关的加载

我想使用pura JPA/提供商便携解决方案,但我对特定于提供商的解决方案也很好奇

具体的想法是让用户在表单中创建并保留实体(例如联系人信息的实例),然后将它们与在另一表单中创建的另一个实体(例如具有发件人属性的文档)关联。用于关联的可用实体(已持久化)将显示在表中。此表应可通过计数器对最频繁使用的实体进行排序,或通过时间戳对最近使用的实体进行排序


我使用的是JPA2.1(目前是EclipseLink 2.6.4)。

我在UI中添加了一个
存储
接口,该接口包装了
EntityManager
,允许注册持久性回调之前和之后(功能接口是一个真正的福音),如


此建议已由另一位用户提出,但显然已被删除。

您能解释一下为什么要这样做吗。似乎很少有不被其他实体使用的en实体,需要一对一、多对一的可选实体(通常是一件坏事)。这就像有一个松散的地址与一个人无关。我解释了具体的想法。这是否意味着这是一种多对多的关系?实体之间是否存在双向关系。我正在寻找一种解决方案,用于所有3/4类型的双向和非双向关系。我的应用程序支持可交换模块(并提供通过反射创建和持久化实体的表单(请参阅))。如果您的所有关系都具有双向关系,您应该能够简单地计算一对多和多对多中的项目数(其他两个有一种用法)集合作为@PostLoad运算符的一部分。这不能很好地扩展,除非阻止,否则最终会级联加载所有内容。通常,如果您想要一个实体表,那么您需要对其进行排序和分页,这样就可以在数据库中进行计数,以防止加载所有内容。
@FunctionalInterface
interface Callback {
    void callback(EntityManager e);