2010-07-20 2 views
2

다른 테이블에 있지만 동일한 데이터베이스에있는 모든 데이터가 동일한 스키마를 가지고 있습니다. 런타임 변수에 따라 Hibernate를 질의 할 때 사용할 테이블을 선택하고 싶습니다. 이것이 가능한가?Hibernate에서 n 개의 테이블을 1 개의 클래스로 런타임 단방향 매핑

최대 절전 모드를 사용하여 에만 테이블 데이터를 개체에 읽음을 유의하십시오.

ClassTable1.hbm.xml: <class name="Class" table="table1">...</class> 
ClassTable2.hbm.xml: <class name="Class" table="table2">...</class> 
ClassTable3.hbm.xml: <class name="Class" table="table3">...</class> 

HibernateUtil.java: 
    getSessionFactoryTable1() {...} // load mapping ClassTable1.hbm.xml 
    getSessionFactoryTable2() {...} // load mapping ClassTable2.hbm.xml 
    getSessionFactoryTable3() {...} // load mapping ClassTable3.hbm.xml 

미운 :

해결책은 (내가 생각하는) 테이블 당 하나의 *.hbm.xml - 파일 및 테이블 당 하나의 SessionFactory를 할 것이다. 특히 *hbm.xml -files의 유일한 차이점은 table 속성입니다.

이렇게하는 것이 더 좋은 방법이 있습니까? 이상적으로는 하나Class.hbm.xml.

+0

슬프게도 비슷한 상황이었습니다. 동일하거나 쉽게 조정 가능한 스키마를 사용하여 200 개의 테이블에 분산 된 엔티티에 대한 읽기 전용 액세스가 필요했습니다. 한 테이블에 매핑 된 뷰에 테이블을 결합하여이 문제를 실제로 해결하는 것을 피했습니다. 상황에 따라 이것이 현실적이라면 고려해 볼 수 있습니다. 그렇지 않으면 사람들이 어떤 솔루션을 가지고 있는지보고 관심을 가질 것입니다 ... –

답변

2

일부 런타임 변수에 따라 최대 절전 모드를 쿼리 할 때 사용할 테이블을 선택하고 싶습니다.

이 질문을하는 경우, 이것은 Hibernate가 유스 케이스를위한 최선의 도구가 아닐 수도 있음을 말해 준다.

쉬운 해결책으로, HibernateUtil.getSessionFactory() 메소드에서 어떤 hbm.xml 파일이 Configuration에 사용되는지 프로그래밍 방식으로 제어하지 않는 이유는 무엇입니까? 최대 절전 모드 구성 개체 can be programmatically configured.

+0

Hibernate를 사용한다면, 이것은 아마도 가장 나쁜 솔루션처럼 들릴 것입니다. 나는 그것을 줄 것이다! 덧붙여 말하자면, 다른 도구가 더 잘 어울리는 것을 안다면, 주석 달기 : – eferm

+1

@Emore, 잘 Hibernate는 훌륭한 ORM 도구이지만 실제로 빛나며 객체의 전체 수명주기를 관리하기위한 것입니다 - 창조, 업데이트 및 읽기. 객체를 읽는 것만으로도 쓰레기로 비행을 할 수 있습니다 - Spring의 JdbcTemplate과 iBatis SqlMaps는 더 가벼울 수있는 두 가지 옵션입니다. 두 가지 모두에서 기본적으로 실행할 SQL 쿼리를 지정하고 결과 세트의 열에서 객체의 필드까지 매핑 (스프링 JdbcTemplate에서 대개 코드 내, iBatis에서는 대개 XML)을 지정합니다. –

+0

아, 알 수 있습니다. 비록 내가 아마도 Hibernate와 함께 학습과 일관성을 유지하기 위해 머무를지라도, 나는 그것들을 확실히 읽을 것이다. 감사! – eferm

2

hbm.xml 파일에서 클래스를 정의하는 대신 주석을 사용할 수 있습니까? 모든 열 매핑을 정의하는 기본 클래스를 작성할 수 있습니다 (변경하지 않는다고 말한 이후). 각 "table1", "table2", "table3"시나리오에 대해 한 번 확장합니다. 하위 클래스에는 해당 클래스의 올바른 테이블을 가리키는 다른 주석이 있습니다. 일할 수도 있습니다.

+0

흥미 롭습니다. 나는 그것에 대해 생각하지 않았다. 그러나, 나는 이것이 다른 Classed로 귀착 될 것이라고 믿는다; 각 테이블마다 하나씩? – eferm

관련 문제