2013-12-20 3 views
2

В настоящее время я использую Spring-Boot для создания веб-приложения с использованием данных Spring MVC и JPA, однако я получаю проблему с свойством spring.jpa.hibernate.ddl-auto: создать, поскольку он что при первом запуске мои таблицы A, B, C создаются правильно. Затем я заполняю все 3 таблицы, и когда я закрываю приложение и снова запускаю его, в таблице A по-прежнему содержатся заполненные данные.Весенняя обувь и проблема с ddl-auto

Таблицы B и C полностью уничтожены, что немного странно.

Кто-нибудь знает, почему это так?

У меня есть следующие в моей pom.xml, как зависимостей

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>0.5.0.M6</version> 
</parent> 


<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.26</version> 
     </dependency> 
    </dependencies> 

</dependencyManagement> 

<dependencies> 
    <!-- Web Dependencies --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring3</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>nz.net.ultraq.thymeleaf</groupId> 
     <artifactId>thymeleaf-layout-dialect</artifactId> 
    </dependency> 


    <!-- Persistence --> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

    <!-- Test --> 
    <!-- <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot</artifactId> 
     <classifier>tests</classifier> 
    </dependency> --> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 

    </dependency> 

    <!-- Database --> 
<!--<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> 
     <scope>runtime</scope> </dependency> --> 

     <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.26</version> 
    </dependency> 

    <!-- Validation Dependencies --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
    </dependency> 


</dependencies> 

spring.jpa.hibernate.ddl-авто

+1

Это работает для меня. Возможно, эти таблицы не были удалены (или созданы) Hibernate? Если вы можете поделиться примером проекта, который показывает эту проблему, будет легче диагностировать. –

+0

Нет таблиц, созданных hibernate .. его просто, что по какой-то причине, если вы оставите значение spring.jpa.hibernate.ddl-auto: создать некоторые из таблиц, полностью воссозданных с нуля при последующих запусках, не уверен, что это связано с использованием mysql или что-то в этом роде. – Javed

+0

Это со мной тоже. – Jay

ответ

0

Возможно, у вас есть внешний ключ contraint? У меня была эта проблема с использованием таблиц MySQL, таблицы не могут быть TRUNCATEd или DROPED, если таблица является внешним ключом другого (даже если это не нарушает никаких «реальных» записей ...)

+0

Ну, в моем случае A имеет внешний ключ в B («A» от одного до многих «B»), а C не имеет отношения к какой-либо другой сущности .. происходит то, что B и C очищаются, а A остается неизменным с собственностью spring.jpa.hibernate.ddl-auto: создать. Я бы не ожидал каких-либо разрешенных сокращений, но только создать, когда будет обнаружено новое Существо, здесь он, похоже, не реагирует таким образом – Javed

1

Когда ddl-auto = create, он вытирает таблицы и воссоздает их, поэтому drop-create - это ожидаемое поведение, и я ожидаю, что вы потеряете свои данные. Единственное, что удивительно, это то, что он оставляет стол А один. В моем случае мои интеграционные тесты, которые используют ddl-auto = create, не имеют доступа к таблице, в которой все еще есть данные после запуска. Поэтому я думаю, что он не воссоздает таблицы, к которым не обращаются.

Смежные вопросы