hibenate 파일 설정

13053 단어
Hibernate 에서 각 표 의 맵 파일... hbm. xml 은 도 구 를 통 해 생 성 할 수 있 습 니 다. 예 를 들 어 MyEclipse 개발 을 사용 할 때 맵 파일 을 자동 으로 생 성 하 는 도 구 를 제공 합 니 다.다음은 이 프로필 들 의 설정 을 설명 합 니 다.
       프로필 의 기본 구 조 는 다음 과 같 습 니 다.
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?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" >
<hibernate-mapping package="  ">
<class name="  " table="  ">
                 <id name="   java      "column="      " type="   ">
                   <generator class="      "/>
</id>
         ……
    </class>
</hibernate-mapping></span>

1. 홈 키 (id)
 Hibernate 의 메 인 키 생 성 정책 은 다음 과 같은 몇 가지 가 있 습 니 다.
1)  assigned
홈 키 는 외부 프로그램 에서 생 성 되 며 save () 전에 지정 합 니 다.
2)  hilo
hi / lo 알고리즘 을 통 해 실 현 된 메 인 키 생 성 체 제 는 추가 데이터베이스 시트 나 필드 에서 높 은 비트 소스 를 제공 해 야 합 니 다.
3)  seqhilo
hilo 와 유사 하 게 hi / lo 알고리즘 을 통 해 이 루어 진 메 인 키 생 성 체 제 는 데이터베이스 에 있 는 Sequence 가 필요 합 니 다. 예 를 들 어 Oracle 과 같은 Sequence 를 지원 하 는 데이터 베이스 에 적용 되 어야 합 니 다.
4)  increment
메 인 키 는 수치 순 으로 증가 합 니 다.이 방식 의 실현 체 제 는 현재 응용 인 스 턴 스 에서 변 수 를 유지 하여 현재 의 최대 값 을 저장 한 다음 에 메 인 키 를 생 성 할 때마다 이 값 을 메 인 키 로 추가 합 니 다.이런 방식 이 발생 할 수 있 는 문 제 는 군집 에서 사용 할 수 없다 는 것 이다.
5)  identity
데이터베이스 에서 제공 하 는 메 인 키 생 성 메커니즘 을 사용 합 니 다.예 를 들 어 DB2, SQL Server, MySQL 의 메 인 키 생 성 메커니즘.
6)  sequence
데이터베이스 에서 제공 하 는 sequence 메커니즘 으로 메 인 키 를 생 성 합 니 다.Oralce 의 Sequence 와 같다.
7)  native
Hibernate 가 사용 하 는 데이터베이스 에 따라 자체 적 으로 판단 하여 idenity, hilo, sequence 중 하 나 를 메 인 키 로 생 성 합 니 다.
8)  uuid.hex
Hibernate 에서 128 비트 UUID 알고리즘 을 기반 으로 16 진수 (인 코딩 후 길이 32 의 문자열 로 표시) 를 메 인 키 로 생 성 합 니 다.
9)  uuid.string
uid. hex 와 유사 합 니 다. 생 성 된 메 인 키 만 인 코딩 (길이 16) 하지 않 고 PostgreSQL 데이터베이스 에 적용 할 수 없습니다.
10) foreign
다른 연 결 된 대상 의 식별 자 를 주 키 로 사용 합 니 다.
홈 키 설정 예:

           

또한 Hibernate 클래스 를 확장 하여 자신의 메 인 키 생 성 정책 을 만 들 수 있 습 니 다.
2. 한 쌍 의 다 중 관계 (< many - to - one... / > 와 < set... > < / set >)
     한 쌍 의 다 중 관 계 는 일반적으로 한 표 가 다른 표 와 외부 키 가 연 결 될 때 사용 된다. 예 를 들 어 사용자 표 의 조직 id 는 조직 표 와 외부 키 가 연 결 될 때 '한' 자 는 조직 표 이 고 '다' 자 는 사용자 표 이다. 한 조직 은 여러 사용 자 를 포함 할 수 있 기 때문에 한 사용 자 는 한 조직 에 속 할 수 밖 에 없다.
한 쌍 의 다 중 관계 와 다 중 관계 가 존재 하 는 쌍방 에 대해 서 는... hbm. xml 에 해당 하 는 설정 을 해 야 합 니 다. 이 때 '한' 측 (예 를 들 어 조직) 은 맵 파일 에 < set... > < / set > 요 소 를 추가 해 야 합 니 다. 여러 개의 '다 중' 측의 대상 을 포함 하기 때문에 일반적인 형식 은 다음 과 같 습 니 다.
< set name = "자바 맵 클래스 에 대응 하 는 속성" inverse = "true" lazy = "true" >
< key column = "표 에 대응 하 는 필드" / >
     

  

                 


'다' 자 (예 를 들 어 사용자) 는 '한' 자 대상 에 속 하고 일반적인 형식 은 다음 과 같다.
< many - to - one name = "자바 맵 클래스 에 대응 하 는 속성" column = "표 에 대응 하 는 필드" class = "클래스 이름" not - null = "true" / >
Eg.

3. 일대일 관계 (< one - to - one... / >)
일대일 관 계 는 상대 적 으로 한 쌍 의 다 중 관계 에 있어 서 드 물 지만 어떤 경우 에 도 사용 해 야 한다. 예 를 들 어 한 사용자 의 기본 정보 표 (USER) 와 한 사용자 의 암호 표 (PASSWD) 는 일대일 관계 가 존재 한다.하 이 버 네 이 트 에서 의 일대일 관계 설정 을 살 펴 보 겠 습 니 다.
그 중에서 메 인 테이블 (eg. 사용자 의 기본 정보 테이블) 의 설정 은 다음 과 같다.
< one - to - one name = "메 인 테이블 대상 중성자 테이블 대상 의 속성 명" class = "하위 테이블 대상 의 클래스 명" cascade="save-update"/>
Eg.
하위 테이블 (eg. 사용자 의 암호 테이블) 의 설정 은 다음 과 같 습 니 다.
< one - to - one name = "하위 테이블 대상 의 주 테이블 대상 의 속성 명" class = "주 테이블 대상 의 클래스 명" constrained = "true" / >
Eg.
4. 다 중 관계 (< many - to - many... / >)
데이터 베 이 스 를 디자인 할 때 보통 다 중 관 계 를 두 쌍 의 다 중 (또는 다 중) 관계 로 전환한다. 예 를 들 어 캐릭터 를 바탕 으로 하 는 권한 시스템 에서 사용자 와 캐릭터 가 존재 하 는 관 계 는 전형 적 인 다 중 관계 이다. 즉, 한 사용자 가 여러 개의 역할 을 가 질 수 있 고 한 캐릭터 는 여러 사용자 에 게 소유 할 수 있다. 보통 디자인 할 때사용자 와 캐릭터 의 관련 표를 추가 합 니 다. 이 표 는 사용자 표 와 캐릭터 표 에 모두 외부 키 와 연결 되 어 있 습 니 다.
이 소절 에 서 는 분해 되 지 않 은 다 중 관계 가 Hibernate 에서 어떻게 설정 되 는 지 설명 합 니 다.설정 형식 은 다음 과 같 습 니 다.
  
  
  
  
Eg. 상술 한 다 대 다 관 계 는 다음 과 같다.
t_사용자 측:
  
  
  
  
t_역할 측:
  
  
  

5. 전체 인 스 턴 스
이 소절 에서 hbm. xml 맵 파일 의 예 를 들 어 개발 자 들 이 감성 적 인 인식 을 가지 도록 합 니 다.다음은 사용자 표 (tbl user), 사용자 와 캐릭터 관련 표 (tbl user role), 캐릭터 표 (tbl role), 조직 표 (tbl organization) 의 예 를 설명 한다.
(1)tbl_user
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                           "-//Hibernate/HibernateMapping DTD 3.0//EN"
                           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mappingpackage="com.amigo.dao.pojo">
    <class name="User"table="tbl_user">
        <idname="loginname" column="loginName"type="java.lang.String">
           <generator class="assigned"/>
        </id>
 
        <propertyname="name" column="name"type="java.lang.String" not-null="true" />
        <propertyname="password" column="password"type="java.lang.String" not-null="true" />
        <propertyname="mobile" column="mobile"type="java.lang.String" />
        <propertyname="telephone" column="telephone"type="java.lang.String" />
        <propertyname="email" column="email"type="java.lang.String" />
        <propertyname="createtime" column="createTime"type="java.util.Date" not-null="true" />
        <propertyname="lastlogintime" column="lastLoginTime"type="java.util.Date" />
        <propertyname="logintimes" column="loginTimes"type="java.lang.Long" not-null="true" />
        <propertyname="state" column="state"type="java.lang.Byte" not-null="true" />
        <propertyname="description" column="description"type="java.lang.String" />
 
       <many-to-one name="organization" column="orgId"class="Organization" not-null="true" />
        <setname="userRoleSet" inverse="true"cascade="all-delete-orphan" lazy="true">
           <key column="loginName"/>
           <one-to-many class="UserRole"/>
        </set>
</hibernate-mapping></span>

(2)tbl_organization
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?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" >
<hibernate-mappingpackage="com.amigo.dao.pojo">
    <classname="Organization" table="tbl_organization">
        <idname="orgid" column="orgId"type="java.lang.Long">
           <generator class="native"/>
        </id>
 
        <propertyname="parentorgid" column="parentOrgId"type="java.lang.Long" not-null="true" />
        <propertyname="orgname" column="orgName"type="java.lang.String" not-null="true" />
        <propertyname="orgfullname" column="orgFullName"type="java.lang.String" />
        <propertyname="orglevel" column="orgLevel"type="java.lang.Integer" not-null="true" />
        <propertyname="state" column="state"type="java.lang.Byte" not-null="true" />
        <propertyname="description" column="description"type="java.lang.String" />
        <propertyname="creator" column="creator"type="java.lang.String" />
        <propertyname="createtime" column="createTime"type="java.util.Date" />
        <setname="userSet" inverse="true" lazy="true">
           <key column="orgId"/>
           <one-to-many class="User"/>
        </set>
    </class>
</hibernate-mapping></span>

(3)tbl_user_role
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?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" >
<hibernate-mappingpackage="com.cotel.netvote.dao.model">
    <class name="UserRole"table="tbl_user_role">
        <idname="urid" column="urId"type="java.lang.Integer">
           <generator class="native"/>
        </id>
       <many-to-one name="role" column="roleId"class="Role" not-null="true" />
       <many-to-one name="user" column="loginName"class="User" not-null="true" />
    </class>
</hibernate-mapping></span>

(4)tbl_ role
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?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" >
<hibernate-mappingpackage="com.cotel.netvote.dao.model">
    <class name="Role"table="tbl_role">
        <idname="roleid" column="roleId"type="java.lang.Integer">
           <generator class="native"/>
        </id>
 
        <propertyname="rolename" column="roleName"type="java.lang.String" not-null="true" />
        <propertyname="createdate" column="createDate"type="java.util.Date" not-null="true" />
        <propertyname="description" column="description"type="java.lang.String" />
 
        <setname="userRoleSet" inverse="true" lazy="true"cascade="all">
           <key column="roleId"/>
           <one-to-many class="UserRole"/>
        </set>
    </class>
</hibernate-mapping></span>

총결산
(1) Hibernate 의 관계 유형
일대일
(2) 관련 조작 을 하 는 장점
Hibernate 에서 관련 관 계 는 매 핑 된 표 와 표 간 의 관 계 를 나타 내 고 관련 조작 을 사용 하여 관계 가 있 는 표 간 에 데이터 의 동기 화 를 유지 할 수 있 습 니 다.관련 작업 은 프로그래머 가 프로그램 을 작성 하 는 과정 에서 다 중 표 작업 코드 에 대한 작성 을 줄 이 고 프로그램 을 최적화 시 켜 프로그램 운행 의 효율 을 높 일 수 있 습 니 다.

좋은 웹페이지 즐겨찾기