我们有一个文档管理应用程序,其中一部分是自定义文档表单,供客户输入文档元数据并将其保存到他的数据库中。为了创建这些表单,我们开发了第三方专有应用程序,它负责表单的设计(字段在哪里,它们是什么类型等)然后采用这种设计并创建动态表来在数据库中表示它。每个表格由3个表格表示:
columns
在数量和类型上都是动态的。在一种形式中,column_A
可能是整数,而另一种形式column_A
可能是日期。一个表可能有10列,而另一个表可能有70个。这完全取决于它所代表的形式。我们目前遇到的问题是我们想要将JPA添加到我们的项目中。但是,为了工作,JPA要求所有持久性模型都在xml中或通过注释定义,这对我们来说是不可能的,因为我们的应用程序事先并不知道每个表单的Table_C
设计。当我们想要从该表中检索数据时,我们实际查询Table_A
,找出有多少字段,然后根据结果动态构建查询并查询其元数据Table_C
。这种技术不可能在JPQL
中执行,因为它需要具体的对象来创建查询。我的问题是,是否可以使用DatabaseMetaData
和Java的Reflection API动态创建持久性模型?
TL; DR:是否可以通过阅读JPA
并使用Java的Reflection API在运行时创建DatabaseMetaData
持久性模型?