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