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
中获取的,但是我将它设置为 create
或 update
,数据库在 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。
作为基准,我正在使用 Spring 引导演示 Accessing Data JPA。
我的目标是能够使用 h2 控制台查看持久化的实体。我可以使用 Maven 运行应用程序,但是当我随后连接到 h2 控制台时,数据库是空的。
如果我设置 spring.jpa.hibernate.ddl_auto=none
然后应用程序不会运行,所以我知道这个值是从 src/main/resources
中获取的,但是我将它设置为 create
或 update
,数据库在 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。