2013-12-20 2 views
2

현재 Spring-MVC 및 JPA 데이터를 사용하여 웹 응용 프로그램을 만드는 데 스프링 부트를 사용하고 있지만 spring.jpa.hibernate.ddl-auto와 함께 문제가 발생 함 :을 그대로 사용하십시오. 첫 번째 실행에서 내 테이블 A, B, C가 올바르게 생성 된 것처럼 보입니다. 그런 다음 모든 3 테이블을 채우고 응용 프로그램을 닫고 다시 실행할 경우 테이블 A에만 채워진 데이터가 포함됩니다.스프링 부트 및 ddl-auto 문제

테이블 B와 C는 완전히 이상합니다. 약간 이상합니다.

왜 그런지 알고 있습니다.

내가 가지고있는

<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

아니요 테이블이 최대 절전 모드로 만들어졌습니다. 값을 남겨두면 몇 가지 이유가 있습니다. spring.jpa.hibernate.ddl-auto : 후속 실행에서 테이블의 일부를 처음부터 완전히 다시 만듭니다. mysql 또는 뭔가 사용하는 것과 관련이 있습니다. – Javed

+0

이것은 나에게도 일어나고있다. – Jay

답변

0

이 아마도 당신이 외래 키 contraint이 종속성으로 내 pom.xml 파일 내에 다음? 나는이 테이블에 TRUNCATEd 또는 DROP 될 수 없다.이 테이블이 다른 하나의 foreign 키인 경우 (심지어 이것이 "실제"레코드를 깨지 않아도 ...)

+0

글쎄 내 경우 엔 A가 B ("A"가 "B")에 외래 키를 가지고 있고 C는 다른 어떤 엔티티와도 관계가 없다. A는 속성이 변경되지 않은 상태에서 B와 C가 지워진다는 것이다 spring.jpa.hibernate.ddl-auto : create. 나는 새로운 엔티티가 발견되었을 때 생성 된 것을 제외하고는 모든 클리어 된 다운을 기대하지 않았지만, 여기서는이 방식으로 반응하지 않는 것 같습니다. – Javed

1

ddl-auto = create를 실행하면 테이블이 지워지고 다시 만들어 지므로 drop-create가 예상되는 동작이므로 데이터가 손실 될 것으로 예상됩니다. 유일한 놀라운 점은 테이블 A를 혼자 남겨 두는 것입니다. 필자의 경우 ddl-auto = create를 사용하는 통합 테스트에서는 실행 후에도 데이터가있는 테이블에 액세스하지 않습니다. 그래서 나는 그것이 액세스되지 않은 테이블을 다시 생성하지 않는다고 생각합니다.