2011-08-16 5 views
4

새로운 것이 추가되지만, 이전 버전을 삭제하지는 않는다. 나는 오래된 것들을 말할 때Hibernate hbm2ddl.auto update는 mysql이있는 컬럼을 삭제하지 않는다.

, 나는 그들이 존재하고

수동으로 안부를 떨어 뜨리거나에 설정 값을 변경하는 내 유일한 옵션은 @column 주석 이전에 지금은 완전히 제거된다 엔티티 객체의 속성을 의미 create? 어느 쪽도 특히 매력적이지 않다.

아니면 다른가요?

+0

필자는 문서에서 오래 전에 칼럼을 추가하지만 절대로 제거하지 않는다는 것을 기억합니다. 'create'는 매번 데이터베이스를 비 웁니다. 그러나 내가 기억하는 것으로부터 업데이트하지는 않습니다. 처음으로 db를 빌드 할 것입니다. 'create-drop'을 사용해야합니다. 데이터베이스를 생성하기 위해'update'를 사용하면 외래 키와 인덱스를 생성하지 못할 수도 있습니다. 그러나 이것에 대해서는 잘 모릅니다. – Ali

답변

11

살아있는/프로덕션 데이터베이스에서 결코 hbm2ddl.auto를 사용하지 마십시오.

예를 들어, "업데이트"가 참조되지 않은 열을 삭제하지 않을 것입니다 (아마 최대 절전 모드 응용 프로그램에서 사용하지 않는 열이있는 "레거시"데이터베이스를 사용할 수 있기 때문에 "의도 한대로 작동합니다" 외부 응용 프로그램에서 사용할 수 있습니다). 그러나 특정 상황에서, 예를 들어 엔티티의 데이터 유형을 변경하면 최대 절전 모드에서 열을 삭제하고 다시 만들 수 있습니다. 그것이 어떤 프로덕션 시스템에도 사용해서는 안되는 이유 중 하나입니다.

저는 개인적으로 엄격하게 로컬/dev 환경에서 데이터 모델의 변경 사항을 처리하는 자동화 된 "블랙 박스"프레임 워크를 신뢰하지 않습니다. 나는 항상 그것을 로컬 개발 환경에서 설정 했으므로, 당신은 create-drop을 할 수있다. 일단 앱을 중앙 테스트/스테이지로 승격시키고 나서 prod를 시작하면, 모든 데이터베이스 변경은 DBA에 의해 수행됩니다 : 오래된 구식 DDL 스크립트. hibernate (또는 다른 ORM/자동화 된 프레임 워크)에서 잠재적 인 버그 나 예기치 않은 동작에 대해 위험을 감수하기에는 데이터가 너무 중요합니다. 나는 심지어 내 애플리케이션에 구성된 데이터베이스 사용자가 최대 절전 모드의 잘못된 구성으로 인한 재난을 막기 위해 데이터베이스의 작성/삭제/변경 권한조차 갖고 있지 않은지 확인합니다.

당신의 질문에 대답하십시오. 당신의 엔터티를 정확하게 반영하는 당신의 데이터베이스를 항상 유지하기 위해서 최대 절전 모드를 원한다면 "create-drop"만이 유일한 옵션입니다. 로컬 Dev 데이터베이스 이외에는 사용하지 마십시오.

+1

+1 별도의 데이터 사용자 및 데이터 소유자. – beny23

1

귀하의 데이터베이스와 동기화하여 데이터베이스를 유지하기 위해 liquibase을 살펴 보겠습니다. 어쩌면 약간의 과잉 공격이지만 그만한 가치가있을 것입니다.

+0

예 그것은 과잉 공격이며 또한 마음이 날려, 슬픔, 광기 및 마침내 미친 것입니다 – ismail

관련 문제