Hibernate DDL表动态创建

时间:2014-10-14 18:02:50

标签: java hibernate spring-data spring-boot ddl

我有一个spring boot项目,我正在使用hibernate将我的实体映射到DB,但是现在我有了一个新的要求:我需要能够在DB中动态创建表,没有任何映射(到目前为止) )。

有谁知道某个框架,帮我处理这个问题: - 我想执行SQL或类似的(ddl)来创建我的表 - 我需要处理连接管理

我被告知弹簧数据,但我需要对此有所了解。

一个例子: 想象一下,我有一个可供客户使用的服务,例如:

class DBHACKService {
  void executeSQL(String ddl).
}

客户端调用它:

new DBHackService.executeSQL ("create table mytable (name varchar)");

在这个方法中我可以对sql做一些操作。 问题是:哪个是将其发送到DBEngine的最佳方式。

再次感谢

提前致谢。 瑞

4 个答案:

答案 0 :(得分:2)

您可以查看DdlUtils,您可以随时根据运行时所需的更改来提供它,并将更改反映在数据库中。格式与数据库无关,因此您不必担心自己的可移植性。

我不知道它是如何更新的。

如果你喜欢Groovy

答案 1 :(得分:1)

查看database initialization上的Spring Boot文档。

最简单的选择是将schema.sql文件放在类路径的根目录中(例如在src/main/resources中)。此文件中的任何DDL都将作为应用程序启动的一部分运行。 One of Spring Boot's JDBC samples显示了这一点。

第二个更复杂的选项是使用数据库迁移工具,如LiquibaseFlyway。迁移工具的优势在于,随着应用程序需求的变化,它可以更容易地发展数据库模式。 Spring Boot具有LiquibaseFlyway的小样本应用程序。

答案 2 :(得分:0)

如果您希望动态创建架构,我想这应该可以帮助您。

Hibernate: Automatically creating/updating the db tables based on entity classes

您可以使用jdbc发出ddl语句来动态创建表。 将查询保存在某个xml文件中。 所以它仍然是通用的。 在配置文件上有一个watcher服务,使用新查询更新时刻文件,你可以触发所需的jdbc调用

答案 3 :(得分:0)

您希望如何使用作为参数传递的sql。

如果你想验证sql,一个选项是触发查询,如果你得到一个例外 这意味着传递参数存在一些问题。

如果要解析sql查询,则可以使用jSqlParser。 http://jsqlparser.sourceforge.net/