2011-09-29 3 views
1

이렇게 테이블이 있다고 해봅시다.자동 테스트를 깨지 않고 Hibernate에서 같은 테이블의 테이블과 뷰를 매핑 할 수 있습니까?

CREATE TABLE big_table (UUID varchar(32) not null, ...); 

HQL 또는 Criteria 쿼리로 표현할 수없는 테이블에 쿼리가 있습니다. 나는 오라클의 뷰로 쿼리를 설정하려고한다.

CREATE VIEW big_table_view AS SELECT bt.* FROM big_table bt 
    LEFT OUTER JOIN ... 
     -- (multicolumn subselect over big_table for some historical stuff) 
    WHERE ... 

같은 Java 클래스를 테이블과 뷰에 모두 매핑하려고한다. 그것은 정말 멋질 것입니다. 왜냐하면 둘 다 같은 Criteria 쿼리를 실행할 수 있기 때문입니다.

제 문제는 제 HSKDB 테스트 코드로 혼란을 야기하지 않는 HBM 매핑 파일을 만들 수 없다는 것입니다. 내 테스트 셋업은 hibernate.hbm2ddl.autocreate-drop으로 설정된 일반적인 Maven/Spring 테스트 셋업이므로 Hibernate는 테스트를 위해 즉시 HSQLDB 스키마를 생성한다.

내 매핑 파일은 현재 다음과 같이 보입니다 :

<hibernate-mapping> 
    <class name="com.example.BigPojo" entity-name="bigPojo" 
      table="big_table"> 
     &commonPropertiesEntity; 
    </class> 

    <class name="com.example.BigPojo" entity-name="bigPojoView" 
      table="big_table_view"> 
     &commonPropertiesEntity; 
    </class> 
</hibernate-mapping> 

... 내 테스트를 실행하면 HSLQDB가 big_table_view라는 테이블을 모든 동일한 외국 키 제약 조건, 인덱스, 등 내가 database-object 요소를 통해 만든 가져옵니다 후에 스키마를 수정하려면 노력하고있어 :

<database-object> 
    <create> 
     DROP TABLE big_table_view CASCADE; 
     CREATE VIEW big_table_view... 
    </create> 
    <drop> 
     DROP VIEW big_table_view IF EXISTS; 
    </drop> 
    <dialect-scope name="org.hibernate.dialect.HSQLDialect" /> 
</database-object> 

...하지만 아직 뭔가 깨는 및 여전히 시도하는 통해 넘어 가고 있어요. 그것을 알아 내라. hbm2ddl에서 bigPojoView 엔티티를 제외하기 위해 Hibernate에게 말할 수있는 방법이 있습니까? 이 매핑을 일반적으로 수행하는 더 좋은 방법이 있습니까? 나는 어떤 충고 에라도 열려있다.

답변

1

hbm2ddl에서 테이블을 제외하는 쉬운 방법은 없습니다. 그러나 Hibernate의 subselect 인 see footnote #20 under 5.1.1을 통해 뷰를 맵핑 할 수있다. 같은

뭔가 : 나는 당신을 영원히 사랑

<class name="com.example.BigPojo" entity-name="bigPojoView" 
    <subselect> 
     ... your view definition here ... 
    </subselect> 
    <synchronize table="big_table"/> 
    <id name="UUID"/> 
    ... 
</class> 
+0

이 완벽하게 작동합니다. subselect가 원시 SQL이 아니기 때문에 걱정하지 않았지만 내가하고있는 모든 일은 Oracle과 HSQLDB에서 모두 작동하는 것 같습니다. –

관련 문제