使用自定义分隔符通过 Spring Boot 生成 DDL

2023-11-23

我想使用 spring boot v1.4.3 和 JPA - Hibernate 5.0.11 生成创建和删除 ddl 脚本。

我发现的大多数答案都使用javax.persistence.schema-generation特性。例如。https://stackoverflow.com/a/36966419/974186

这种方法的问题是它输出的 sql 语句没有分隔符。例如。

create table ... (...)
create table ... (...)

我希望它输出带有分隔符的语句;

create table ... (...);
create table ... (...);

但我找不到任何javax.persistence.schema-generation属性来配置它。

所以我想使用SchemaExport从休眠状态,因为你可以设置分隔符属性。但要创建一个SchemaExport我需要一个MetadataImplementor(未弃用的 API)。

我不知道如何获得MetadataImplementor从春季启动。

有谁知道是否有

  • a javax.persistence.schema-generation定义分隔符的属性
  • 或者如何创建一个SchemaExport(获取依赖项)
  • 或者有其他解决方案?

这是一些您可以使用的代码

@SpringBootApplication
@ComponentScan(basePackageClasses = Application.class)
@EntityScan(basePackageClasses = User.class)
public class Application {

    @Bean
    public ApplicationRunner getApplicationRunner() {
        return new ApplicationRunner() {

            public void run(ApplicationArguments args) throws Exception {
                // MetadataImplementor metadataImplementor = ???;
                // new SchemaExport(metadataImplementor);
            }
        };
    }

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }

}

实体类

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    public Long getId() {
        return id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
}

另一个实体类

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    public Long getId() {
        return id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
}

应用程序属性

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql

Maven 依赖项

<properties>
    <spring.boot.version>1.4.3.RELEASE</spring.boot.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>   

使用休眠 5.0

我刚刚用 hibernate 尝试了上面的代码5.0.11.Final。你唯一必须改变的是

SchemaExport schemaExport = new SchemaExport((MetadataImplementor) metadata);
schemaExport.setDelimiter(";");
schemaExport.setFormat(false);
schemaExport.setOutputFile(dropAndCreateDdlFile.getAbsolutePath());

schemaExport.execute(true, false, false, false);

或者当然让java配置返回一个MetadataImplementor代替Metadata并改变ApplicationRunner构造函数参数


您可能想尝试设置以下 Hibernate 属性:

spring.jpa.properties.hibernate.hbm2ddl.delimiter=;

#in addition to the other standard JPA properties you refered to, namely:
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql

我发现这可以完成这项工作Spring Boot 2.1.2.RELEASE+ 匹配的 Hibernate 版本 (5.3.7.最终)我需要相同功能的项目。

它可能非常适合您不太不同的 Hibernate 环境。


有点偏离主题,但我仍然存在一个问题:Hibernateappends创建.sql。我希望我能找到一种方法来拥有它replace文件内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义分隔符通过 Spring Boot 生成 DDL 的相关文章

随机推荐

  • 如何在 Angular 2 中提供用于开发(而不是测试)的模拟服务?

    我需要一种方法来在 Angular 2 中的开发过程中 而不是在测试过程中 模拟我的服务 原因是 REST ful 服务器不可靠 在没有通知的情况下更改 API 不稳定 并且难以擦除和重新站起来 如果我可以模拟我的服务 基本上都是 HTTP
  • 配置文件地狱

    偶尔我会遇到一个问题 即为设备配置开发版本的应用程序 错误消息通常是 找不到此可执行文件的有效配置文件 我已遵循所有 Apple 说明 我拥有有效的开发证书 开发人员配置文件包含相关设备的设备 ID 构建过程中进行协同设计 我为我的开发人员
  • 将字符串转换为可空类型(int、double 等...)

    我正在尝试进行一些数据转换 不幸的是 大部分数据都是字符串 它应该是 int 或 double 等 所以我得到的是这样的 double amount Convert ToDouble strAmount 这种方法的问题是 如果 strAmo
  • BSTR、LPCOLESTR 等的含义是什么?

    如果 BSTR LPCOLESTR LPCWSTR LPTSTR LPCWCHAR 和其他许多只是一堆解析为 wchar t 的定义 那么它们的含义是什么 LPTSTR指示字符串缓冲区可以是 ANSI 或 UNICODE 具体取决于宏的定义
  • 关键帧中的背景图像在 Firefox 或 Internet Explorer 中不显示

    我的网站上有几个动画 我刚刚意识到它们甚至没有显示在 Firefox 或 Internet Explorer 中 我有background image在关键帧内 我这样做是因为我在动画中具有不同百分比的不同图像 为什么不background
  • 输出带有数字分组的数字(1000000 为 1,000,000 等)

    虽然自己写一些东西来做到这一点很容易 但我经常想知道是否有类似的东西iomanip或某处 但是 我从未找到有用的东西 理想情况下 它对区域设置敏感 例如 在德国 您可以将 1 234 567 89 写为 1 234 567 89 因此比手动
  • 如何在QEMU源代码中添加新设备?

    模拟 添加新设备的逐步方法是什么qemu使用 QOM 方法 DeviceState BusState 和其他属性可能会发生哪些变化以及在哪里发生变化 edu树内教育 PCI 设备 https github com qemu qemu blo
  • ASP.NET MVC 注定要取代 Webforms 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我发现了这些问题 但其中有
  • Numpy:如何检查数组是否包含某些数字?

    例如 我有a np array 123 412 444 and b np array 123 321 我想知道是否a包含all中的元素b 有一个简单的操作吗 在这种情况下 情况并非如此 你总是可以使用一组 gt gt gt a numpy
  • AddOAuth linkedin dotnet core 2.0

    我正在使用 dotnet core 我想在网站上设置 LinkedIn 身份验证 因为 LinkedIn 没有像 facebook google 和 twitter 这样的默认身份验证构建器 我决定使用通用实现 如下所示 services
  • 时间:2019-03-17 标签:c#networklogin

    如何在 C 中以编程方式执行网络登录 例如访问共享驱动程序 可以通过尝试通过资源管理器打开共享或通过 net use shell 命令来实现相同的目的 P Invoke 调用WNetAddConnection2会成功的 看here了解更多信
  • NetBeans - “sun-resources.xml”与“glassfish-resources.xml”

    您知道 Netbeans 如何决定应用程序范围的资源使用哪个文件名 sun resources xml or glassfish resources xml 该名称是可配置的还是硬编码的 据我了解 GlassFish 支持sun resou
  • 在 WebGL 着色器中获取准确的整数模

    我想获得精确的模数x and y在 WebGL 片段着色器中 x and y是整数 Graphing mod x y we get the following 用于生成红黑矩形的实际代码是 gl FragColor vec4 mod flo
  • 将鼠标悬停在对象上时获取对象的“原始”(非悬停)背景颜色

    我可以使用以下函数获取任何元素的背景颜色 example css background 然而 就我而言 鼠标移动到该元素上时 由于 CSS 我收到了修改后的颜色 hover伪类 有什么办法可以得到原色吗 就像是 example cssWit
  • 多行编辑文本,其中部分不可编辑,例如填空

    我需要一个包含 textview 和 edittext 的视图 例子 Yay you made it to We should hang out feel to follow me 上面的 可以是任意长度 并且最后应该感觉像一个段落 上面给
  • 如何加入 TransactionScope?

    简洁版本 我如何加入正在进行的交易范围 长版 如果您使用交易范围 您可以创建一个 周围的 交易 using TransactionScope scope new TransactionScope stuff happens then you
  • 获取屏幕比例

    我们可以获得屏幕的分辨率和内容Screen班级 所以 我们应该使用Screen WorkingArea Width and Screen WorkingArea Height 如果我们想在屏幕中央放置一些东西 但是 在 Windows 8
  • read() 和 fread() 有什么区别?

    我正在阅读linux工具的源代码坏块 他们使用read 在那里发挥作用 和标准C有区别吗fread 功能 我没有将参数视为差异 read 是低级 无缓冲的读取 它在 UNIX 上进行直接系统调用 fread 是 C 库的一部分 并提供缓冲读
  • Paypal 快速结账优惠券代码

    我在我的网站上使用 Paypal Express Checkout 系统 但我想放一个优惠券 折扣 代码区域 如果代码为真 则会减少 如 GoDaddy com 的购物车系统 您知道我应该从哪里开始吗 我没有使用任何电子商务框架 我知道这是
  • 使用自定义分隔符通过 Spring Boot 生成 DDL

    我想使用 spring boot v1 4 3 和 JPA Hibernate 5 0 11 生成创建和删除 ddl 脚本 我发现的大多数答案都使用javax persistence schema generation特性 例如 https