2012-01-11 4 views
11

최대 절전 모드에서 데이터베이스 스키마를 처음 만들고 싶습니다. 또한 새 테이블을 추가하거나 일부 열을 삭제하는 것과 같이 스키마에 수정 사항이있는 경우 기존 데이터를 그대로 유지하면서 기존 스키마를 업데이트하려고합니다.최대 절전 모드에서 데이터베이스 스키마를 처음 생성하는 방법과 스키마 수정시 더 업데이트하는 방법은 무엇입니까?

옵션에 따라 this question에 나와있는 것처럼 이전 데이터를 파괴하는 스키마를 만들 수 있거나 스키마를 업데이트 할 수있는 것처럼 보입니다.

둘 다 할 수있는 가치가 있습니까?

+0

이 작업을 자동화 하시겠습니까? 다시 말해 DB를 두 번 이상 만들 것인가? – Xorty

+0

아니, 나는 craete db 한 번하고 싶지 않아. 앞에서 말했듯이, 처음 수정 된 후에 db 스키마를 수정해야합니다. –

+0

'업데이트'를 유지하려고 시도 했습니까? 두 경우 모두 '업데이트'가 작동하지 않습니까? – Jayasagar

답변

1

엔터티 변경 내용을 기반으로 db 스키마를 업데이트하지 않는 것이 좋습니다. Flyway 또는 Liquibase으로 가십시오. stackoverflow에서 비슷한 질문을 찾을 수 있습니다. Hibernate/JPA DB Schema Generation Best Practices

+0

안녕하세요. kris.Thanks reply.Actually 그냥 지금 알고 싶습니다. 스키마가 존재하지 않으면 최대 절전 모드에서 데이터베이스 스키마를 만들 수 있습니까? 그렇지 않으면 스키마가 이미 존재하고 일부 수정 사항이 일부 hbm 파일에있는 경우 스키마를 업데이트하십시오. 속성 값 hibernate.hbm2ddl.auto –

23

실제로 나는 방금 테이블을 만들 때 <property name="hibernate.hbm2ddl.auto" value="update" />도 처음으로 테이블을 만들고 나중에 테이블/스키마가 존재하는지 확인합니다.

Update 속성은 새 모델을 시작하거나 추가 할 때 적용 할 수 있습니다. 이전에 저장된 엔티티 인스턴스를 유지하려고합니다. 이것은 기본 스키마 작성 스타일입니다.

필요한 경우 스키마를 업데이트하려고합니다. 다음 업데이트가 지원됩니다

  • 이 필드를 추가 내 관찰의 일부를 참조 - 새 열이 테이블에 추가됩니다.
  • 필드 이름 바꾸기 - 원래 열은 유지되지만 더 이상 사용되지 않지만 새 열이 테이블에 추가됩니다. 참고 : 이전 열의 데이터가 새 열로 마이그레이션되지 않습니다.
  • 필드 제거 - 열은 남아 있지만 사용되지 않습니다.
  • 필드 유형 변경 - 열 유형이 변경되지 않으므로 형식이 일치하지 않는 예외가 발생할 수 있습니다.
  • 엔티티 만들기 - 새 테이블을 만듭니다.
  • 엔티티 이름 바꾸기 - 원래 테이블이 유지되는 동안 새 테이블을 만듭니다.
  • 엔티티를 다른 폴더로 이동 - 원본 테이블이 유지되는 동안 새 테이블을 만듭니다.
  • 엔티티 삭제 - 테이블이 유지됩니다.
+0

포인트가 정말 도움이됩니다 !! –

2

'import.sql'을 사용할 수 있습니다.

는 다음과 같이 자원에 import.sql 파일을 추가합니다 :

/*create database at first time*/ 
CREATE SCHEMA your-database-name; 

하고 다음과 같이 '있는 hibernate.cfg.xml'에 한 줄을 추가하십시오 존재하지 않을 경우,

<hibernate-configuration> 
    <session-factory> 
     ... 
     ... 
     <property name="hbm2ddl.import_files">import.sql</property> 
     ... 
     ... 
    </session-factory> 
</hibernate-configuration> 

그래서 데이터베이스, 최대 절전 모드는 새로운 데이터베이스를 만듭니다.