2012-09-15 4 views
4

hbm2ddl이 나를 위해 테이블을 생성하게하고 (dev 용) 열은 클래스의 필드의 역순으로 있습니다.Hibernate : hbm2ddl에 의한 열 순서 변경

클래스와 동일한 순서로 열을 만들 수있는 방법은 무엇입니까?

자바 클래스는 필드의 순서를 저장하지 않으므로 Hibernate는 소스의 순서가 무엇인지 알지 못합니다 (논리적으로 보입니다).

그러나 나는 적어도 Hibernate에게 PK와 FK 컬럼을 첫번째 컬럼으로 넣을 것을 요청할 수 있습니까?

최대 절전 모드 4.0.0 의 MySQL의 5.1.x (보스 7.1.2 AS)

+0

이 문제도 발생했습니다. 난 그냥 데이터베이스 스키마를 수출, 열 순서를 수동으로 변경하고 그것을 다시 가져 왔습니다. 그러나 해결책이 있다면, 나는 그것에 대해 알기에 매우 흥미가있을 것입니다. –

+0

두 번째 질문을 해결하기 위해 [HHH-7612] (https://hibernate.onjira.com/browse/HHH-7612)를 만들었습니다. –

+0

오래된 스레드와 좋은 대답은 받아 들였지만 속은 것처럼 보입니다. http://stackoverflow.com/questions/5964714/maintain-the-order-of-column-when-creating-a-new-table-using-hibernate – bphilipnyc

답변

6

최대 절전 모드 팀은이 known limitation을 말한다 그것은 순서를 설정하는 것은 불가능하다. 하지만 프로덕션 환경에서 Hibernate를 사용할 때는 hbm2ddl에 의존하지 말아야합니다. 예를 들어 열을 추가 할 수 있지만 제거 할 수는 없습니다. 대신 사람들은 대개 LiquiBase 또는 FlyWay 또는 DbDeploy과 같은 도구를 사용하여 DB 마이그레이션을 생성하므로 스키마 업데이트에 대한 유연성과 제어력이 향상됩니다.

이 접근법이 어떻게 도움이되는지 설명합니다. UAT 환경이 있고 방금 스키마를 업데이트했다고 가정하면 기존 열에 null이 아닌 제약 조건을 추가하려고합니다. hbm2ddl로는 불가능하며, QA가 데이터베이스를 처음부터 다시 만들도록 강요합니다. 위에 설명 된 도구를 사용하면 SQL 파일을 추가해야하며 해당 도구는 스키마를 각각 업데이트하는이 새 스크립트를 실행합니다. 또한 hbm2ddl = verify를 설정하여 현재 DB 스키마가 최신인지 또는 Hibernate 매핑이 올바른지 확인할 수 있습니다.