可以使用JPA 2.0 Metamodel来确定双向关联的两侧

时间:2012-06-19 20:00:55

标签: rest jpa orm metamodel

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

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

例如,考虑典型的“项目和员工”模型,并假设从项目员工之间存在一对多的关系 - 一个< em> Project 可以包含多个 Employee 实体, Employee 一次只能“属于”一个 Project 。 / p>

此外,假设此关系是双向的 - 员工具有项目属性,项目具有员工 property,返回当前“属于” Project Employee 实体的集合。属性 Employee.project Project.employees 映射双向关联的两面。

请考虑以下网址:

PUT /Project/1/employees

附带的(JSON)状态表示

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

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

我需要做的是,在标准 Metamodel API的情况下,确定 Employee 是否具有满足此关联的双向方面的某些属性,如果存在,那么我可以将该属性设置为相关的 Project 实体。

换句话说,我需要能够确定 Employee 具有 Employee.project 属性,该属性满足 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时,任何人都可以指出我正确的方向来确定双向关联双方所涉及的属性,那么将非常感激。

1 个答案:

答案 0 :(得分:2)

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