2

我正在构建一个库,该库通过 REST 接口直接公开持久性单元中的实体,以包含在 JAX-RS 或标准 Web 应用程序中。

为了方便这个库的可用性,我希望库本身在必要时管理双向关联的设置/取消设置,以便使用简单的状态表示来实现复杂实体关系的持久化和修改。

例如,考虑典型的“项目和员工”模型,并假设项目员工之间存在一对多的关系——一个项目可以包含多个员工实体,而一个员工可能只“属于”一个项目一次。

还假设这种关系是双向的 - Employee有一个project属性,而Project有一个employees属性,它返回当前“属于” Project的Employee实体的集合。Employee.projectProject.employees属性 映射了双向关联的两侧。

考虑以下网址:

PUT /Project/1/employees

以及伴随的(JSON)状态表示

//Employee representation
{
   firstName: "some", 
   lastName:  "guy",
   salary: 1000000.01,
   ...
   ...
}

此 URL/状态表示组合指示我的库构建Employee实体并将其添加到其标识属性产生值“1”的项目的Project.employees 集合中。

我需要做的是,给定标准的Metamodel API,确定Employee是否有一些属性可以满足该关联的双向方面(如果存在),以便我可以将该属性设置为有问题的Project实体.

换句话说,我需要能够确定Employee具有 满足Project.employees关联的双向组件的Employee.project属性。

因此状态/URL 组合本质上执行以下任务:

EntityManager em = ....;

//this is the Employee represented by the state representation    
Employee employee = ..... ;

Object id = 1;
Project project = em.find( Project.class, id );
project.getPersons().add( employee );

我需要知道何时执行以下操作

employee.setProject( project );

我当前的实现依赖于模仿 JPA 2.0 映射中的 'mapped-by' 属性的自定义注释,并且我计划在 JPA 2.0 注释中实现对 'mapped-by' 属性值的检查。这可行,但它需要专有配置(我试图摆脱)或 JPA 2.0 注释(如果有人专门使用映射文件怎么办?)。

如果在给定 Entity java 类型和 Metamodel API 时,任何人都可以指出我确定双向关联双方所涉及的属性的正确方向,那将不胜感激。

4

1 回答 1

2

我得出的结论是,没有办法从标准持久性元模型中获得这样的双向数据。我已经通过使用现有的 JPA 2.0 注释解决了我的问题,如果正在使用 XML 映射,则回退到自定义 @Bidirectional 注释。

于 2012-07-18T13:32:52.053 回答