如何使用JPA在运行时更改数据库表?

时间:2017-08-15 20:44:05

标签: java hibernate jpa eclipselink openjpa

我正在为客户创建CRUD应用程序。他让我允许他在一个表单(数据库列)中创建新的字段,而无需重新启动应用程序服务器。我应该使用哪个JPA实现(hibernate,eclipselink,openjpa) 完成这项任务以及如何完成任务?

1 个答案:

答案 0 :(得分:2)

请不要在运行时更改数据库架构。

假设您要向表中添加一列。然后,您还必须在实体类中添加一个字段。和映射。因此,您不仅必须在运行时更改Java类,而且在下一个应用程序启动时,您必须再次添加此字段。没有JPA实现可以做到这一点。

当然,您可以使用纯JDBC。而不是具有具体字段的实体类,您可以使用类似地图的动态字段。但是您应该根据动态字段的存在调整所有SQL查询。因此,您需要一种方法来存储信息,这些信息已经创建了动态字段。您可以使用另一个表执行此操作或使用表元信息。此外,您必须管理用户定义的字段名称。例如,您应该避免使用SQL关键字,最大字段名称长度等。

或者你可以退一步重新思考你的方法。您有一个要求:表单中的静态给定字段以及创建动态字段的可能性。

为什么不使您的数据模型适应该要求?一种能够处理动态表单字段的数据模型。这种灵活的数据模型不需要动态SQL表字段创建。 (JPA也可以解决这个问题。)

最简单的例子是一个包含两列的表。一个用于字段名称,一个用于值(作为字符串)。也许是第三个识别类型的人。

另一种选择是使用NoSQL数据库系统,如键值存储或面向文档的数据库。