하이버 네이트 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
- 부여 개체 권한을 : 그래서 다음을했다 ,
insert
는update
는delete
)myschema_app
에 - 이전보다 같은 이름을 사용하기 위해
myschema_app
민간 동의어를 선언하고 다른 스키마의 이름 접두어 숨어 - 변화 속성새 스키마 이름
persistence.xml
에validate
-hibernate.hbm2ddl.auto
설정을하면서 변경 사용자/
context.xml
에서 Tomcat의 소스 정의에 암호가 나는 응용 프로그램을 시작하면 프레임 워크는 EntityManagerFactory
을 만들려고 할 때, 나는 예외가 테이블이 없다는 것을 알려줍니다. myschema_app
이 연결된 SQL 도구에서 select 문을 직접 실행하면 모든 것이 잘 동작합니다.
동의어를 다른 테이블로 사용하는 것이 애플리케이션에 투명하다는 것을 이해했습니다. 내가 간과 해 왔을지 모르는 사람이 있습니까?
. 네, 이미 보았습니다. 그 매개 변수를 생략하면 응용 프로그램이 작동하지만, Hibernate가 유효성 검사 중에 동의어를 지원하지 않는다는 것이 유감입니다. 응용 프로그램에 맞는지 확인하기 위해 시작할 때 스키마의 유효성을 검사하는 것이 좋습니다. . –
문제는 테이블 타입이 하드 코드 된 org.hibernate.tool.hbm2ddl.DatabaseMetadata 클래스에 있습니다. private static final String [] TYPES = { "TABLE", "VIEW"}; 실제로 있어야 할 곳 private static final String [] TYPES = { "TABLE", "VIEW", "ALIAS", "SYNONYM"}; – user482745