이렇게 테이블이 있다고 해봅시다.자동 테스트를 깨지 않고 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.auto
가 create-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에게 말할 수있는 방법이 있습니까? 이 매핑을 일반적으로 수행하는 더 좋은 방법이 있습니까? 나는 어떤 충고 에라도 열려있다.
이 완벽하게 작동합니다. subselect가 원시 SQL이 아니기 때문에 걱정하지 않았지만 내가하고있는 모든 일은 Oracle과 HSQLDB에서 모두 작동하는 것 같습니다. –