动态创建的数据库表有哪些适用于Java ORM?

6
我们考虑从我们自己编写的代码转换到ORM,以简化代码基础并移动到可能更为健壮的代码。目前我们有一些“系统”表和可变数量的“自定义”表。每个安装的自定义表都不同:一个客户可能有关于发票的表,另一个可能有有关保险单的表等等。这些自定义表可以随时添加,并应立即对用户可用。我们编写了一堆Java类来遵循DBO模式:每个系统表一个类,以及一个通用类用于自定义表。还有一个通用的Java对象实例化自定义记录;该类具有像Object getProperty(String name)这样的通用方法。
我们看了几个ORM,但没有找到任何可以简化使用此类自定义表的方法。
是否有类似经验的人?谢谢。

@JBNizet,没有预定义的“自定义”表:每个客户都可以设计自己的表。 - eppesuig
那么ORM不是解决方案。(但我不知道还有什么可以成为解决方案)。你如何处理你一无所知的表格? - JB Nizet
我对那张表的所有信息都了如指掌,但只有在运行时才知道。当程序编写时,我对这些表一无所知,但每次用户定义它们时,我都能获得所有细节(名称、字段类型、主键、外键、默认值)。我想知道是否可能创建一个Java类(使用反射Java API),并满足ORM要求? - eppesuig
我不明白。当客户在其数据库中创建一个具有名称、一组列和类型的新表格,而您从未听说过时,您该怎么办?如何使现有代码神奇地处理它,并基于这个新表格实现新的功能用例,而不改变任何代码? - JB Nizet
程序是一个DMS,因此我们基本上存储和检索文档。每个文档都有一些属性,因此我们为所有文档类型创建一个表。一旦创建,用户可以插入/搜索/删除/更新该文档。每个用户操作都被转换为SQL。GUI完全动态,并根据文档本身设计自己。列类型只能是字符串/数字/日期和其他简单类型。 - eppesuig
显示剩余2条评论
3个回答

1
也许使用查询映射器框架比ORM更合适。
例如,使用MyBatis,您甚至可以动态映射表名(请参见通过参数设置MyBatis中的FROM子句)。
<select id="getLookupRows" parameterType="map" resultMap="lookupMap">
   select id, name, active, valid
   from ${table}
</select>

0

使用 ,你应该真正专注于拥有完整和成熟的对象模型。完成此后,将对象映射到关系数据库是自然而然的。如 '@JB Nizet' 的评论所说,你需要拥有所有的对象。因此,也许重新考虑设计并使其适用于 ,无论是 还是其他任何 ORM,可能会很有用。

有一个名为'动态模型'的实验性功能,我不太了解它,因为我还没有机会使用它,但我猜它可能会给你一些见解。另外请注意,它目前是一个实验性功能,因此未来可能会更改。


我刚刚了解了动态模型,但它们仍然需要一个特定的Java类,该类必须对应于一个表,并且在创建工厂时,我认为您必须读取XML配置文件。我不知道是否可以在创建或更改“自定义”表时销毁工厂并创建新的工厂。 - eppesuig

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接