“弹性字段”是一个术语,用于在客户站点更改表格以向表格添加额外的列,以保存有关该表格实体的自定义信息。我想知道是否有人处理过用 jpa 支持这种机制,特别是 eclipselink。
我们希望这样做,因为我们允许根据这些客户指定字段中的值过滤基本行,并且将这些字段放在关联表中会导致此辅助表的多个别名连接。
一个明显的方法(至少在我看来)是定义一个将新字段注入实体对象的方面,然后运行动态编织。
我想知道是否有人这样做过,是否有任何我没有看到的问题,或者关于其他方法的建议。
“弹性字段”是一个术语,用于在客户站点更改表格以向表格添加额外的列,以保存有关该表格实体的自定义信息。我想知道是否有人处理过用 jpa 支持这种机制,特别是 eclipselink。
我们希望这样做,因为我们允许根据这些客户指定字段中的值过滤基本行,并且将这些字段放在关联表中会导致此辅助表的多个别名连接。
一个明显的方法(至少在我看来)是定义一个将新字段注入实体对象的方面,然后运行动态编织。
我想知道是否有人这样做过,是否有任何我没有看到的问题,或者关于其他方法的建议。
那么,如果您将新字段注入到您的实体中,您将如何在应用程序中使用这些字段?您还会更改您的应用程序/用户界面的代码吗?
最简单的解决方案通常是在您的实体中拥有一个属性映射,这允许在运行时添加新属性,并允许应用程序/UI 访问和查询这些属性,以便它可以呈现它们并允许编辑和显示。您可以使用 ElementCollection 或 OneToMany 将属性映射到属性表。
如果您希望更改现有表,这会更复杂,您还需要更新 JPA 映射,方法是编辑 orm.xml 并重新部署应用程序,或者在 SessionCustomizer 或 DescriptorCustomizer 中添加映射。EclipseLink 还支持 VIRTUAL AccessMode,它允许将列映射到属性而不是字段或 get/set 方法。
更暴力的方法是更新对象模型代码和应用程序代码以利用新数据。
EclipseLink 还提供了更多的动态解决方案来将动态实体映射到表而不需要类。
我已经开始构建一个示例来说明 EclipseLink 如何与可扩展模型(键值表或弹性列)一起使用。这是一项正在进行的工作,但我已经开始向示例 wiki 页面添加更多图表和示例代码:
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensible
这也包括使用上面提到的动态支持 James。