2011-05-05 3 views
2

Eclipselink를 사용하여 런타임시 엔티티 테이블 매핑을 변경할 수 있습니까? 주석으로 정의 된 Entity-View 매핑이 있습니다. 이제는 비즈니스 요구 사항이 있습니다. "이 뷰가 비어 있으면 기본 테이블을 시험해보십시오". 따라서보기에서 기본 테이블로 전환해야합니다.Eclipselink를 사용하여 런타임에 Exchange Entity 테이블 매핑

보기는 일부 제한 사항이있는 테이블의 SELECT입니다.

답변

2

언제보기가 비어 있는지 확인해야합니까?

시작할 때 한 번만 수행 할 수 있다면이 체크를 SessionCustomizer에 넣고 ClassDescriptor의 테이블을 변경할 수 있습니다.

쿼리 할 때마다 이렇게해야한다면 훨씬 더 이상합니다. MappedSuperclass와 두 개의 하위 클래스를 정의 할 수 있습니다. 하나는 뷰에 매핑되고 다른 하나는 테이블에 매핑 된 다음 응용 프로그램에서 사용할 테이블을 결정할 수 있습니다.

원하는 결과를 제공하는 다른보기를 정의 할 수도 있습니다.

런타임에 세션에서 ClassDescriptor를 가져 와서 변경할 수는 있지만 일반적으로 다른 클라이언트/스레드가 설명자/세션을 동시에 사용할 수 있으므로 좋지 않은 생각입니다.

또는 항상 테이블에 매핑하고보기를 사용하는 대신 쿼리 (또는 추가 조인 기준)와 관련이있는 항목을 필터링하십시오.

+0

매우 도움이되는 답변입니다. 나는 MappedSuperclass 방법을 시도 할 것이다, 이것은 나를 위해 일해야한다. – Soccertrash