表被“ spring.jpa.hibernate.ddl-auto”截断以验证

时间:2019-11-07 09:35:56

标签: mysql spring-boot spring-data-jpa

NB:Spring Boot 2.1.10 + Spring Cloud Greenwich.SR3

我有两个Spring Data JPA服务访问相同的外部数据库(即MySQL)并共享一个公共域:

@Entity
@Data
public class Person {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "first_name") @NotNull
    private String firstname;
    private LocalDate birth;
    private Integer votes = 0;
}

在第一个服务(生产者)中,我添加了一个data.sql用于样本插入:

insert into person(first_name) values ('foobar');
insert into person(first_name) values ('scoubidou');

以及以下属性:

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.initialization-mode=always

在第二个服务(消费者)中,我只想使用架构而不在启动时对其进行修改,因此我使用了以下属性:

spring.jpa.hibernate.ddl-auto=validate
spring.datasource.initialization-mode=never

启动生产者时,将创建数据库模式并用示例实体填充。 但是,当我启动使用者时,实体表将被截断。 请问有人知道桌子如何排空以及如何避免吗?

2 个答案:

答案 0 :(得分:0)

请勿在生产者服务上使用create-drop。阅读this

  
      
  • 无:MySQL的默认设置。数据库结构没有任何变化。

  •   
  • 更新:Hibernate根据给定的实体结构更改数据库。

  •   
  • create:每次创建数据库,但不会在关闭时将其删除。
  •   
  • create-drop:创建数据库并在SessionFactory关闭时将其删除。
  •   

尝试仅使用create

spring.jpa.hibernate.ddl-auto=create

答案 1 :(得分:0)

此属性最终解决了问题:

spring.jpa.properties.hibernate.hbm2ddl.auto=validate

也许spring.jpa.hibernate.ddl-auto的连接有误导作用?