我正在构建一个库,该库通过 REST 接口直接公开持久性单元中的实体,以包含在 JAX-RS 或标准 Web 应用程序中。
为了方便这个库的可用性,我希望库本身在必要时管理双向关联的设置/取消设置,以便使用简单的状态表示来实现复杂实体关系的持久化和修改。
例如,考虑典型的“项目和员工”模型,并假设项目与员工之间存在一对多的关系——一个项目可以包含多个员工实体,而一个员工可能只“属于”一个项目一次。
还假设这种关系是双向的 - Employee有一个project属性,而Project有一个employees属性,它返回当前“属于” Project的Employee实体的集合。Employee.project和Project.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 时,任何人都可以指出我确定双向关联双方所涉及的属性的正确方向,那将不胜感激。