Spring 引导 JPA 和 H2 记录未保留

Spring Boot JPA & H2 Records Not Persisted

作为基准,我正在使用 Spring 引导演示 Accessing Data JPA

我的目标是能够使用 h2 控制台查看持久化的实体。我可以使用 Maven 运行应用程序,但是当我随后连接到 h2 控制台时,数据库是空的。

如果我设置 spring.jpa.hibernate.ddl_auto=none 然后应用程序不会运行,所以我知道这个值是从 src/main/resources 中获取的,但是我将它设置为 createupdate,数据库在 mvn spring-boot:run 运行结束时仍然是空的。

在 Spring 和 Hibernate 的过去版本中,我设置了 auto_dll=create,如果数据库不存在,Hibernate 会创建它。这不再有效吗?

这是更新后的示例应用程序的样子,减去导入声明:

@Configuration
@EnableAutoConfiguration
public class Application {

    @Bean
    public DataSource dataSource() {
        HikariConfig config = new HikariConfig();
        config.setDriverClassName("org.h2.Driver");
        config.setJdbcUrl("jdbc:h2:file:~/db1");
        config.setUsername("sa");
        config.setPassword("");
        return new HikariDataSource(config);
    }

public static void main(String[] args) {

    ConfigurableApplicationContext context = SpringApplication.run(Application.class);
    CustomerRepository repository = context.getBean(CustomerRepository.class);

    // save a couple of customers
    repository.save(new Customer("Jack", "Bauer"));
    repository.save(new Customer("Chloe", "O'Brian"));
    repository.save(new Customer("Kim", "Bauer"));
    repository.save(new Customer("David", "Palmer"));
    repository.save(new Customer("Michelle", "Dessler"));

    // fetch all customers
    Iterable<Customer> customers = repository.findAll();
    System.out.println("Customers found with findAll():");
    System.out.println("-------------------------------");
    for (Customer customer : customers) {
        System.out.println(customer);
    }
    System.out.println();

    // fetch an individual customer by ID
    Customer customer = repository.findOne(1L);
    System.out.println("Customer found with findOne(1L):");
    System.out.println("--------------------------------");
    System.out.println(customer);
    System.out.println();

    // fetch customers by last name
    List<Customer> bauers = repository.findByLastName("Bauer");
    System.out.println("Customer found with findByLastName('Bauer'):");
    System.out.println("--------------------------------------------");
        for (Customer bauer : bauers) {
            System.out.println(bauer);
        }

        context.close();
    }

}

TIA, - 奥莱

默认情况下,JPA 数据库配置设置为在开头创建表并在结尾删除。这可以通过 application.properties 文件中的以下条目进行更改:

spring.jpa.hibernate.ddl-auto=update

参见参考资料 here