JPA 和数据库 Flex 字段
“弹性字段”是一个术语,用于更改客户站点的表以向表添加额外的列以保存有关该表实体的自定义信息。我想知道是否有人处理过使用 jpa 支持这种机制,特别是 eclipselink。
我们希望这样做,因为我们允许根据这些客户指定字段中的值过滤基本行,并且将这些字段放在关联表中会导致与该辅助表的多个别名连接。
一个明显的方法(至少在我看来)是定义一个方面,将新字段注入实体对象,然后运行动态编织。
我想知道是否有人这样做过,是否有任何我没有看到的问题,或者关于其他方法的建议。
'Flex fields' is a term for altering a table at the customer site to add extra columns to a table to hold custom pieces of information about that table's entity. I was wondering if anyone has dealt with supporting this mechanism with jpa, specifically eclipselink.
We wish to do this because we allow filtering of the base rows based on values in these customer specified fields, and having these fields in an association table causes multiple alias joins to this auxilliary table.
An obvious approach (at least it would seem to me) would be to define an aspect(s) that injects the new fields into the entity object, and then run dynamic weaving.
I was wondering if anyone has done this, and if there are any problems i'm not seeing, or suggestions about other approaches.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
那么,如果您将新字段注入实体中,您将如何在应用程序中使用这些字段?您还会更改应用程序/UI 的代码吗?
最简单的解决方案通常是在实体中拥有属性映射,这允许在运行时添加新属性,并允许应用程序/UI 访问和查询这些属性,以便可以呈现它们并允许编辑和显示。您可以使用 ElementCollection 或 OneToMany 将属性映射到属性表。
如果您希望更改现有表(这会更复杂),您还需要更新 JPA 映射,方法是编辑 orm.xml 并重新部署应用程序,或者在 SessionCustomizer 或 DescriptorCustomizer 中添加映射。 EclipseLink 还支持 VIRTUAL AccessMode,允许将列映射到属性而不是字段或获取/设置方法。
更强力的方法是更新对象模型代码和应用程序代码以利用新数据。
EclipseLink 还提供了更动态的解决方案,无需类即可将动态实体映射到表。
看,
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic
So, if you inject new fields into your Entity how would you use these in your application? Would you also change your applications/UI's code?
The simplest solution is normally to have a Map of properties in your Entity, this allows new properties to be added at runtime, and allows for the application/UI to access and query these properties so that it can present them and allow editing and display. You can map the properties using an ElementCollection or OneToMany to a properties table.
If you wish the alter the existing table, that would be more complex, you would need to update the JPA mappings as well, either by editing the orm.xml and redeploying the application, or adding the mappings in a SessionCustomizer or DescriptorCustomizer. EclipseLink also supports a VIRTUAL AccessMode that allow mapping a column to a property instead of a field or get/set method.
A more brute force method is to update the object model code and the application code to make use of the new data.
EclipseLink also provides more dynamic solutions to map dynamic Entities to table without requiring classes.
See,
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic
我已经开始构建一个示例来说明如何将 EclipseLink 与可扩展模型(键值表或弹性列)一起使用。这是一项正在进行的工作,但我已经开始向示例 wiki 页面添加更多图表和示例代码:
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensible
这还包括使用上面提到的动态支持 James。
I have started building an example that illustrates how EclipseLink can be used with extensible models (key-values table or flex-columns). It is a work in progress but I have started adding more diagrams and sample code to the example wiki page:
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensible
This also includes using the dynamic support James mentioned above.