2015-01-08 62 views
0

作爲基準,我使用Spring Boot演示Accessing Data JPA彈簧啓動JPA和H2記錄不被堅持

我的目標是能夠使用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, - 奧萊

回答

1

默認情況下,JPA數據庫配置設置爲創建之初的表和最後下降。這可以通過以下條目在application.properties文件進行更改:

spring.jpa.hibernate.ddl-auto=update 

見參考here

+0

你好Biju - 我試過'update'設置,但是數據庫在應用程序運行後仍然是空的。我知道這些值正在被選中,因爲如果我將它設置爲'none',那麼我會得到一個異常,表示客戶表不存在。思考? – Ole

+1

奇怪的是,它似乎對我乾淨地工作!,我刪除了你的基於HikariCP的數據源,並保留默認與application.properties下面的項'spring.jpa.hibernate.ddl-auto = update spring.datasource.url = jdbc :h2:file:〜/ db1',並在運行結束時看到數據庫中的條目。 –

+0

嗨Biju - 對不起,回覆晚。我最終將其設置爲none,通過Hibernate4 Maven插件生成模式,並通過h2控制檯將模式應用於h2。我現在也獲得記錄。 – Ole