최대 절전 모드로 초기 데이터를 데이터베이스로 가져 오는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/673802

문제

응용 프로그램을 배포 할 때는 종종 배포를 단순화하기 위해 Hibernate의 용량을 사용하여 데이터베이스 스키마를 생성합니다. 이는 Hibernate.hbm2ddl.auto 속성을 구성하여 쉽게 달성 할 수 있습니다.

그러나 때때로 루트 사용자와 같은 일부 초기 데이터를 데이터베이스에 삽입해야합니다. 어떤 종류의로드 텍스트 파일로 최대 절전 모드를 통해이를 달성 할 수있는 방법이 있습니까?

나는 그렇게 할 코드를 쉽게 프로그래밍 할 수 있다는 것을 알고 있지만, 구성을 통해 동일하게 달성하는 데 도움이 될 수있는 유틸리티가 이미 있는지 궁금합니다.

도움이 되었습니까?

해결책

"Hibernate Fixtures"에 대한 검색을 통해 이것을 찾았습니다.

Hibernate는 Entity Manager Factory가 생성 될 때 데이터베이스를 생성합니다 (실제로 Entity Manager Factory가 Hibernate의 SessionFactory를 생성 할 때). import.sql이라는 파일이 클래스 경로의 루트에 존재하는 경우 ( '/import.sql') Hibernate는 데이터베이스 스키마 생성 후 파일에서 읽은 SQL 문을 실행합니다. Hibernate가 스키마를 생성하기 전에 스키마를 비 웁니다 (스키마 구축 프로세스에서 생성 될 모든 테이블, 제약 조건 또는 기타 데이터베이스 개체를 삭제).

원천: http://www.velocityreviews.com/forums/t667849-hibernate-quotfixturesquot-or-database-population.html

시도해보고 그것이 작동하는지 알려주십시오!

다른 팁

클래스 경로에 import.sql을 추가하는 것은 훌륭하게 작동하며 HBM2DDL은 파일이 존재하고 실행되는지 확인합니다. 추가 세부 사항은 각 SQL 명령이 자체 라인에 있어야한다는 것입니다. 그렇지 않으면 실행되지 않습니다.

이것은 또한 경우에만 작동합니다 hbm2ddl.auto 설정되었습니다 create 또는 create-drop.

최대 절전 모드 속성을 추가하십시오 Hibernate.hbm2ddl.import_files 최대 절전 모드 구성에서. hibernate.hbm2ddl.auto 속성을 변경하려면 변경하십시오. 데이터를 삽입하려면 초기 SQL 코드와 함께 Initial_Data.sql in /Classe Directory를 추가하십시오. Hibernate 데이터베이스 스키마를 작성한 후이를 실행합니다.

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.hbm2ddl.import_files">initial_data.sql</prop>
        </props>
    </property>
</bean>

최대 절전 모드 구성에 속성을 추가하지 않으려면 import.sql in /classe Directory 및 최대 절전 모드를 만들 수 있습니다.

hbm2ddl.auto 그리고 hbm2ddl.import_files 속성입니다 사악한

(데이터베이스 변경 관리를위한 도구로 오용 할 때)

말했듯이 다른 곳, 사용 hibernate.hbm2ddl.auto 그리고 hibernate.hbm2ddl.import_files 데이터베이스 변경 관리에는 일부가 있습니다 심각한 단점 :

  1. 구조 만 변경할 수 있습니다. 기존 값이 덮어 쓰거나 최악의 시나리오에서는 단순히 너바나로 전송 될 수 있습니다. 같은 도구없이 Liquibase 또는 Scriptella, 당신은 아무것도 없습니다 ETL 기능.
  2. 이 방법에는 거래가 없습니다. 트랜잭션 관리자가 인수하기 전에 구조와 데이터 명세서가 모두 실행됩니다. 문서 42 of 256에 오류가 있다고 가정 해 봅시다. 데이터베이스는 현재 일관성이없는 상태에 있다고 가정 해 봅시다.
  3. IMVHO, 당신은 투명성과 제어를 느슨하게합니다. Scriptella 스크립트 또는 Liquibase 변경이 설정되거나 일반적으로 도메인 모델의 변경 사항과 함께 커밋되는 경우, 도메인 모델과 희망 (기본적으로)에서 최대 절전 모드가 무엇을 해야하는지 알 수 있습니다. (그렇지는 않지만 다른 이야기입니다.)
  4. 통합, 시스템 및 수락 테스트를 위해 추정하다 테스트 데이터베이스가 있습니다 물론, 정확히 같은 상태 생산 데이터베이스로. 당신은 그 수동으로 추적해야합니다 (행운을 빕니다. 당신이 오류를 일으키는 경우, 작은 미끄러짐만으로도 충분합니다. 결과는 매우 치명적일 수 있습니다.

데이터베이스 변경 관리에 개인적으로 Liquibase를 사용하고 유지 보수 작업을 줄이기 위해 다음 워크 플로우를 개발했습니다.

  • 명령 줄에서 ChangEleg를 만듭니다 나의 마지막 릴리스 구조의
  • 최신 데이터베이스의 변화를 만듭니다
  • 수동으로 두 개의 변화 로그를 차별화합니다 (일반적으로 변화는 그다지 크지 않으며, 그렇다면 일반적으로 단점 중 하나를 충족합니다. Liquibases diff 명령.
  • 변경 세트를 만듭니다

심지어 구현 해야하는 복잡한 변화에도 CustomChange, 이것은 롤백, 테스트 및 문서의 정의를 포함하여 몇 시간 안에 달성 할 수 있습니다. 사소한 변화의 경우 몇 분이 걸립니다. 기본적으로 : 당신은 조금 더 작업을 수행해야하지만 (하루도 채되지 않아 4 개의 데이터베이스 구성을 위해 맞춤형 변경 세트를 만들었습니다), 데이터베이스를 일관된 상태로 유지하기 위해 가능한 모든 것을 수행했다는 마음의 평화를 얻습니다.

이것으로 몇 시간 동안 걸려 넘어진 후, 나는 내가 찾은 것을 공유하기로 결정했지만 아주 오래된 게시물이지만.

제대로 작동하기 위해 다음을 수행해야했습니다.

  • hbmddl 로 설정 create 또는 create-drop
  • classpath 루트의 file.sql; 제 경우에는 방금 넣었습니다 resources 폴더, Maven을 사용하고 있습니다.
  • 한 줄의 각 SQL 명령
  • 각 file.sql은 파일을 구걸 할 때 빈 줄이 있어야합니다. ==>이 이유의 이유를 모르지만, 빈 줄을 삽입하지 않으면 실행 당시 서버는 첫 번째 문자 근처에 구문 오류가 있음을 알려줍니다.

도움이되기를 바랍니다.

import.sql이 올바르게 형식화되어 있는지 확인하십시오. 하나의 라이너 삽입 문으로 시작하여 테스트하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top