Hibernate 프로 그래 밍 은 동적 전환 을 실현 합 니 다.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.csc.poimanager.dao.Poi" table="POI" schema="P_BEIJING">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
</hibernate-mapping>
그 중의 schema = 'P BEIJING' 이 Schema 를 죽 였 다 고 썼 다.이 부분 을 쓰 지 않 고 시스템 설정 인자 < property name = "hibenate. default schema" > POI 를 사용 할 수 있 습 니 다.BEIJING < / property > 이렇게 되면 우리 의 맵 파일 이 됩 니 다.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.csc.poimanager.dao.Poi" table="POI"">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
</hibernate-mapping>
호출 할 때 동적 으로 Schema 의 인 자 를 지정 하면 됩 니 다. 예 를 들 어
public static SessionFactory rebuildSessionFactoryForChangeSchema(String newSchema){
try {
Properties p = configuration.getProperties();
System.out.println("---" + p);
p.put("hibernate.default_schema", newSchema);
sessionFactory = configuration.buildSessionFactory();
System.out.println(" change schema successfully ......... ");
return sessionFactory;
} catch (Exception e) {
System.err
.println("%%%% rebuild session factory failed for changing schema %%%%");
e.printStackTrace();
return null;
}
}
이 방법 은 전환 을 실현 할 수 있 지만, 우 리 는 매번 Session Factory 로 돌아 가 야 한다. 그렇지 않 으 면 동시에 문제 가 생 길 것 이다.왜냐하면 hibenate. defaultschema 시스템 은 하나 밖 에 없습니다.
방법 2: 다 중 설정 을 사용 합 니 다. 예 를 들 어 천진 과 베 이 징 에 대해 우 리 는 각각 해당 하 는 맵 파일 을 작성 합 니 다.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.csc.poimanager.dao.Poi" table="POI" id="P_BEIJING" schema="P_BEIJING">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
<class name="com.csc.poimanager.dao.Poi" id="P_TIANJIN" table="POI" schema="P_TIANJIN">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
</hibernate-mapping>
프로필 은 SCHEMA 와 ID 가 다른 것 을 제외 하고 완전히 같 습 니 다. 어떻게 사용 합 니까?sessionFactory.getBean("P"+placeName); 이렇게 하면 동적 호출 을 실현 할 수 있다.place Name 에 대해 서 는 프론트 호출 프로그램 을 통 해 전달 할 수도 있 고 Thread Local 에 넣 을 수도 있 습 니 다. 후 자 는 더욱 유 니 버 설 적 이 며 이전 프로그램 에 대한 수 정 량 이 가장 적 습 니 다. getPlace Name () 방법 만 쓰 면 되 기 때 문 입 니 다.방법 3: 데이터 뱅 크 의 연결 속성 을 수정 하고 예전 에 SchemaA 를 가리 키 던 것 을 SchemaB 로 바 꾸 려 면 권한 이 높 은 계 정 이 필요 합 니 다.사실은 더 간단 한 방법 이 있 습 니 다. 그것 은 바로 자신 이 DataSource 를 계승 한 다음 에 방법 에서 ThreadLocal 의 매개 변수 에 따라 서로 다른 데이터 연결 을 되 돌려 주 는 것 입 니 다.예 를 들 어 베 이 징 이 라면 베 이 징 데이터 소스 의 연결 을 되 돌려 주 고, TIANJIN 이 라면 톈 진 데이터 소스 의 연결 을 되 돌려 준다.시스템 을 사용 할 때 반드시 DataSource 에서 연결 을 얻 을 것 입 니 다. 우 리 는 내부 에서 분 배 를 했 고 자연 프론트 데스크 톱 의 운행 결과 도 분 배 됩 니 다.알림: DataSource 에 맵 < String, DataSource > 와 같은 구 조 를 포함 하여 내부 리 트 윗 을 할 수 있 습 니 다.개인 총화: 첫 번 째 방법 은 단기, 단일 스 레 드 에 만 적합 합 니 다.두 번 째 방법 은 상대 적 으로 기술 난이도 가 낮 습 니 다. 한 번 배치 할 때 여러 부 를 써 야 합 니 다. 유지 가 비교적 번 거 롭 습 니 다. 세 번 째 방법 은 기술 난이도 가 높 습 니 다. 유지 만 하면 간단 합 니 다. 저 는 개인 적 으로 세 번 째 방법 을 사용 합 니 다. 재 미 있 습 니 다.
IT 지식 망http://www.itwis.com) 상세 출처 참고:http://www.itwis.com/html/java/hibernate/20090824/5678.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.