2010-01-12 2 views
23

최근에 JPA에 대해 간략하게 살펴 보았습니다. 데이터베이스 스키마 마이그레이션에 대해 궁금한 점이 많았습니다.JPA로 스키마 마이그레이션을 지원합니까?

JPA에서이 항목에 대한 지원이 있습니까? 유용? 모범 사례?

건배!

+1

최근에 JPA에 대한 책을 읽었습니다. JPA 2.1은 2013 년에 출시되었으며 현재 마이그레이션을 지원합니까? – AechoLiu

답변

0

generateDdl을 기본 구현 인 경우 최대 절전 모드로 설정하면 현재 방언에 따라 데이터베이스 스키마가 생성됩니다. 따라서 방언을 변경하면 자동으로 데이터베이스가 생성됩니다.

다른 JPA 제공 업체는 이에 대한 속성이 다를 수 있습니다.

+1

올바른 내용이지만 스키마 마이그레이션 문제는 해결되지 않습니다. – HDave

+0

@HDave - 반대입니다. 스키마는 현재 데이터 모델을 반영하여 새 데이터베이스에 복제됩니다. – Bozho

+4

스키마 마이그레이션을 통해 OP는 데이터가있는 기존 데이터베이스를 가져 와서 새로운 엔티티/스키마로 최신 상태로 가져올 수있는 스크립트가 있다는 의미입니다. 이것은 종종 스키마 변경에 대한 신중한 연구와 때로는 FK의 변경, PK의 분리 등을 위해 데이터의 언로드/리로딩을 포함한다. Hibernate는 새로운 스키마를 만들기위한 스크립트를 생성 할 수있다. Hibernate는 이전 스키마를 수정하여 새 스키마로 만들 스크립트를 생성 할 수도 있지만 데이터베이스에 데이터가 없다고 가정하고 심지어 "문제점"때문에 기능을 거의 사용하지 않는다고 생각합니다. – HDave

6

짧은 답변은 아니요입니다.

빈을 변경하면 기존 스키마를 수동으로 마이그레이션해야합니다. 따라서 Rails 스타일의 데이터베이스 마이그레이션을 위해서는 다른 곳을 봐야합니다.

그러나 Java bean에서 초기 ddl을 쉽게 생성 할 수 있습니다. 아래의 예는 EclipseLink 버전 2.0 스키마 생성을 보여

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="JPATestPU" transaction-type="RESOURCE_LOCAL"> 
     <provider> 
      org.eclipse.persistence.jpa.PersistenceProvider 
     </provider> 
     <class>org.randompage.MyEntity</class> 
     <properties> 
      <property name="javax.persistence.jdbc.user" value="johndoe"/> 
      <property name="javax.persistence.jdbc.password" value="secret"/> 
      <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
      <property name="eclipselink.logging.level" value="INFO"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

핵심 요소는 여기이 기존의 테이블을 드롭하고 JPA 매핑에서 한 번 새로운 생성은 EclipseLink를 알려줍니다

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 

입니다. 이 절차는 벤더에 따라 다르므로 다른 JPA 벤더 (Hibernate, OpenJPA ...)는 특정 문서를 참조해야합니다.

11

데이터베이스 스키마를 업데이트하기 위해 JPA 공급자에 의존하지 않을 것입니다. 좋은 접근 방법 중 하나는 Liquibase입니다.