2012-01-11 2 views
6

하이버 네이트 3.3.3을 통해 JPA 1.0 엔티티에 매핑 된 테이블 묶음이있는 Seam 2.2 기반 Java EE 5 웹 애플리케이션이 있습니다. 개발 중에는 Tomcat 6, Oracle 10 XE 및 Windows 7에서 실행됩니다.JPA 테이블 대신 동의어에 Entiy

이제 운영 부서에서 모든 데이터베이스 개체 (myschema)의 소유자 인 하나의 스키마와 하나의 스키마로 데이터 모델을 분할하라는 요청이있었습니다 응용 프로그램의 데이터베이스 사용자 (myschema_app)로 작동합니다. (사용에 하나 이상의 select을 따라하고 순서 : myschema (m 중간 테이블 일반 사람과 n은 모두)에서 모든 필요한 테이블에

  • 만들 스키마 myschema_app
  • 부여 개체 권한을 : 그래서 다음을했다 , insertupdatedelete) myschema_app
  • 이전보다 같은 이름을 사용하기 위해 myschema_app 민간 동의어를 선언하고 다른 스키마의 이름 접두어 숨어
  • 변화 속성새 스키마 이름
  • persistence.xmlvalidate-hibernate.hbm2ddl.auto 설정을하면서 변경 사용자/

context.xml에서 Tomcat의 소스 정의에 암호가 나는 응용 프로그램을 시작하면 프레임 워크는 EntityManagerFactory을 만들려고 할 때, 나는 예외가 테이블이 없다는 것을 알려줍니다. myschema_app이 연결된 SQL 도구에서 select 문을 직접 실행하면 모든 것이 잘 동작합니다.

동의어를 다른 테이블로 사용하는 것이 애플리케이션에 투명하다는 것을 이해했습니다. 내가 간과 해 왔을지 모르는 사람이 있습니까?

답변

8

내 생각에 hbm2ddl은 동의어가 아닌 테이블 전용으로 사용되지만 응용 프로그램이 실제로 스키마에 존재하는 것처럼 작동해야합니다. hbm2ddl 옵션을 제거하고 응용 프로그램을 테스트하십시오.

편집 : 내 추측이 참 보인다 https://forum.hibernate.org/viewtopic.php?p=2438033은 4.3.0로, 동의어로 문제를 해결하기 위해 hibernate.synonyms=true을 설정할 수 있습니다

+0

. 네, 이미 보았습니다. 그 매개 변수를 생략하면 응용 프로그램이 작동하지만, Hibernate가 유효성 검사 중에 동의어를 지원하지 않는다는 것이 유감입니다. 응용 프로그램에 맞는지 확인하기 위해 시작할 때 스키마의 유효성을 검사하는 것이 좋습니다. . –

+0

문제는 테이블 타입이 하드 코드 된 org.hibernate.tool.hbm2ddl.DatabaseMetadata 클래스에 있습니다. private static final String [] TYPES = { "TABLE", "VIEW"}; 실제로 있어야 할 곳 private static final String [] TYPES = { "TABLE", "VIEW", "ALIAS", "SYNONYM"}; – user482745