2015-01-19 3 views
1

Grails 2.4.4를 사용하고 2.2.0에서 내 도메인 클래스를 이식했습니다.Grails 2.4.4 DataSource "create-drop"은 FK가있는 모든 테이블을 삭제하지 못함

MySQL을 데이터 소스로 사용하여 DataSource의 "create-drop"구성에 문제가 있습니다.

grails stop-app 명령을 실행할 때마다 총 35 개의 테이블 중에서 22 개의 테이블이 스키마에 남아 있습니다.

Hibernate 클래스에 대한 디버그 모드를 활성화 한 후 stop-app 프로세스가 끝나면 모든 35 개의 테이블에 대해 drop table if exists <tablename>을 생성했지만 삭제 테이블의 성공 여부에 관계없이 로그에 오류/확인이 없었습니다.

왼쪽 테이블에는 FK 연관이 있으며 특정 순서로 제거해야합니다. 동일한 도메인 클래스 구조로 이전 2.2.0 버전의 grails에서는이 문제가 발생하지 않았습니다.

지금은 수동으로 떨어 뜨리고 있습니다. 실행 앱이 부팅 스트랩 데이터에 문제를 일으킬 때마다 만들기 전입니다.

이 문제를 디버그 할 수있는 포인터 또는이 문제가 발생했을 때를위한 유스 케이스를 알려주세요.

+1

당신은 테이블을 삭제하기 전에 외래 키를 삭제 DDL 문, 예를 들어 있어야한다 '테이블 테이블 이름 변경 외래 키 FK_hrogx8ddq6cptuh5ru8uycn6s'. 'grails schema-export'를 실행하고'target/ddl.sql'을보고 Hibernate가 생성하는 SQL을 봅니다. –

+0

감사합니다. @BurtBeckwith. 'grails schema-export'를 실행하고 파일을 생성했습니다. 시작 35 행은'drop table if exists '입니다. 파일에'alter table tablename drop foreign key '이 없습니다. – v1p

+0

이것은 파일 구조입니다 : 첫 번째'drop table if exists ','create table '다음에 'alter table add UK constraints' & 인덱스 생성이 있습니다. 마지막에'alter table add FK constrains'가 있습니다. – v1p

답변

0

필자의 경우에는 SET FOREIGN_KEY_CHECKS=0으로 설정했는지 확실하지 않지만 MySQL (v5.5.25)의 경우 FK- 검사를 0으로 설정하면이 문제가 해결됩니다.

더 좋은 해결책이있는 분은 공유하십시오.

편집은

문제는 this로 인해 직면했다. 수업은 배운 - 너는 아무 생각없이 임의 코드를 붙여 복사하지 말라 ~ : -/

답변

감사 버트.

DB가 비정상적으로 ddl 작업을 수행하는 경우. 항상 이상적 구조 다음해야하는 grails schema-report에 의해 생성 ddl.sql을 확인

alter table <Table> drop constraint <Constraint> 
... 

drop table if exists <Table> 
... 

create table <Table>(...) 
... 

create index <Index> ... --(if any) 
... 

alter table <Table> add constraint <Constraint> 
.... 
+0

여기서'SET FOREIGN_KEY_CHECKS = 0'을 어디에 설정 했습니까? 정교하게 주시겠습니까? – Chetan

+0

@Chetan :'SET FOREIGN_KEY_CHECKS = 0'은 수동으로 모든 테이블을 삭제하고 있던 mysql 콘솔 세션에서 수동으로 설정되었습니다. – v1p

+0

하지만 실제 문제는 내가 썼던 커스텀 MySQL5InnoDBDialect 클래스에 있었고, 재정의 된 메소드'public boolean dropConstraints()'false를 리턴했다. – v1p