최근에 JPA에 대해 간략하게 살펴 보았습니다. 데이터베이스 스키마 마이그레이션에 대해 궁금한 점이 많았습니다.JPA로 스키마 마이그레이션을 지원합니까?
JPA에서이 항목에 대한 지원이 있습니까? 유용? 모범 사례?
건배!
최근에 JPA에 대해 간략하게 살펴 보았습니다. 데이터베이스 스키마 마이그레이션에 대해 궁금한 점이 많았습니다.JPA로 스키마 마이그레이션을 지원합니까?
JPA에서이 항목에 대한 지원이 있습니까? 유용? 모범 사례?
건배!
generateDdl
을 기본 구현 인 경우 최대 절전 모드로 설정하면 현재 방언에 따라 데이터베이스 스키마가 생성됩니다. 따라서 방언을 변경하면 자동으로 데이터베이스가 생성됩니다.
다른 JPA 제공 업체는 이에 대한 속성이 다를 수 있습니다.
올바른 내용이지만 스키마 마이그레이션 문제는 해결되지 않습니다. – HDave
@HDave - 반대입니다. 스키마는 현재 데이터 모델을 반영하여 새 데이터베이스에 복제됩니다. – Bozho
스키마 마이그레이션을 통해 OP는 데이터가있는 기존 데이터베이스를 가져 와서 새로운 엔티티/스키마로 최신 상태로 가져올 수있는 스크립트가 있다는 의미입니다. 이것은 종종 스키마 변경에 대한 신중한 연구와 때로는 FK의 변경, PK의 분리 등을 위해 데이터의 언로드/리로딩을 포함한다. Hibernate는 새로운 스키마를 만들기위한 스크립트를 생성 할 수있다. Hibernate는 이전 스키마를 수정하여 새 스키마로 만들 스크립트를 생성 할 수도 있지만 데이터베이스에 데이터가 없다고 가정하고 심지어 "문제점"때문에 기능을 거의 사용하지 않는다고 생각합니다. – HDave
짧은 답변은 아니요입니다.
빈을 변경하면 기존 스키마를 수동으로 마이그레이션해야합니다. 따라서 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 ...)는 특정 문서를 참조해야합니다.
데이터베이스 스키마를 업데이트하기 위해 JPA 공급자에 의존하지 않을 것입니다. 좋은 접근 방법 중 하나는 Liquibase입니다.
최근에 JPA에 대한 책을 읽었습니다. JPA 2.1은 2013 년에 출시되었으며 현재 마이그레이션을 지원합니까? – AechoLiu