2012-08-27 3 views
1

Spring과 JPA를 사용하는 응용 프로그램 (Hibernate 포함)에 대한 몇 가지 테스트를 만들려고합니다.테이블 매핑이 다른 데이터베이스를 사용 중일 때 어떻게 메모리 내 테스트 데이터베이스를 만들 수 있습니까?

메모리 내장 데이터베이스를 사용하여 주 개발 서버 (이전 Sybase 설치)에 의존하지 않고 모든 것이 작동하는지 확인할 수 있고 또한 테스트를 더 잘 격리 할 수 ​​있습니다. 기능.

다른 데이터베이스의보기에 액세스하기 위해 @Table("dbname..dbo.someviewname")을 사용하여 매핑되는 많은 테이블이 있습니다. 그래서 DBUNIT로 HSQLDB를 사용하려했지만 HSQLDB는 이름에 점들이있는 테이블을 만들 수는 없습니다.

어떻게 테스트 할 수 있습니까?

메모리 내 기능을 포기하고 주 Sybase 개발 서버를 사용하여 테스트를 수행해야합니까? (다른 devs : P의 경우이를 망칠 위험이 있습니까?)

+1

일반적으로 스키마 정보 (테이블 이름/열 이름)를 클래스에 포함하는 것은 좋지 않습니다. (앱의 전체 수명 동안 오직 하나의 데이터 저장소를 사용하는 경우가 아니면). orm.xml에 저장하고 앱을 배포 할 수있는 각 데이터 저장소에 하나씩 추가하는 것이 좋습니다. – DataNucleus

+0

좋은 지적! 이것은 많은 테이블을 가진 레거시 어플리케이션입니다. 제가 그것에 대해 할 수있는 것을 보도록하겠습니다 ... – elias

답변

0

HSQLDB는 스키마로 dbo이고 테이블 이름으로 somewiewname 인 카탈로그로 dbname을 추출 할 가능성이 높습니다.

HSQLDB는 이름에 점이있는 표를 만들 수 있습니다. 즉 분리 ID로 테이블 이름을 처리하여 수행 할 수 있습니다

@Table(name="\"dbname.dbo.someviewname\"") 

하지만 어떻게 이름이 취급하는 Sybase의 경우도 변경되기 때문에 당신은 그것을 사용하지 않습니다. 당신이 시험에 대한 별도의 orm.xml을 가질 수 있다면, 당신은 orm.xml에 다음 사항을 추가 할 수 있습니다

<persistence-unit-defaults> 
     <delimited-identifiers/> 
    </persistence-unit-defaults> 

모든 데이터베이스 오브젝트 이름은 구분 식별자로 취급됩니다. 매핑 및 쿼리에 따라 결과적으로 작동 할 수도 있지만 대부분 문제가 발생할 수 있습니다. 가장 좋은 방법은 매핑을 위해 스키마 이름을 사용하거나 테스트를 위해 Sybase 인스턴스를 분리하지 않는 것입니다.

+0

감사합니다. 실제로 모든 매핑을 만들기 위해 실제로 작업 할 수있었습니다. @Table (name = "tablename", catalog = "catalogname")'그리고 스프링 빈을 사용하여 나를위한 스키마를 초기화했습니다. – elias

관련 문제