티스토리 뷰
Springi Hibernate 8-6 Object Relation Mapping
XML 설정 매핑
매핑 파일
xxx.hbm.xml 형태로 작성
JDK1.5 이상에서는 매핑파일 대신 Annotation 제공
Board.hbm.xml
|
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.multicampus.entity">
<class name="Board" table="BOARD">
<id name="seq" column="SEQ" type="int">
<generator class="sequence">
<param name="sequence">BOARD_SEQ</param>
</generator>
</id>
<property name="title" column="TITLE" type="string"/>
<property name="writer" column="WRITER" type="string"/>
<property name="content" column="CONTENT" type="string"/>
<property name="regdate" column="REGDATE" type="date" generated="always"/>
</class>
</hibernate-mapping>
|
<hibernate-mapping /> 엘리먼트
XML 파일의 루트 엘리먼트
속성
|
설명
|
schema
|
DB schema를 지정한다.
|
catalog
|
DB catalog를 지정한다.
|
package
|
매핑 클래스가 있는 패키지 이름을 지정한다.
|
default-cascade
|
cascade 속성에 대한 기본값을 설정한다. (기본 : none)
|
default-access
|
프로퍼티에 접근하는 방법을 결정한다. (기본 : property)
|
<hibernate-mapping schema="SCHEMA"
catalog="CATALOG"
package="com.multicampus.biz.vo">
<class name="Board" table="BOARD">
</class>
</hibernate-mapping>
<class /> 엘리먼트
영속 클래스와 테이블을 매핑시킬 때 사용하는 엘리먼트
하나 이상 작성
속성
|
설명
|
name
|
영속 클래스의 이름을 지정한다.
|
table
|
영속 클래스와 매핑되는 테이블 이름을 지정한다.
|
dynamic-update
|
true라면 값이 변경된 프로퍼티에 대해서 동적 SQL을 생성한다. (기본값 : false)
|
dynamic-insert
|
update시 속성값이 변경된 경우에 한해서만 update 에 포함시킬것인지 결정한다. (기본값 : false)
|
select-before-update
|
insert 시 not null 인 속성만 insert 에 포함할 것인지를 결정한다. (기본값 : false)
|
where
|
객체를 검색할 때 조건을 설정한다.
|
optimistic-lock
|
여러 쓰레드에 의해 동시에 객체가 update되는 것을 방지한다.
|
lazy
|
전체적으로 늦은 로딩을 사용할지 여부를 지정한다. (기본값 : true)
|
<hibernate-mapping package="com.multicampus.biz.vo">
<class name="Board" table="BOARD">
</class>
</hibernate-mapping>
<id /> 엘리먼트
영속 클래스의 식별자와 테이블의 기본키를 매핑하는 기능 제공
속성
|
설명
|
name
|
클래스의 식별자로 사용되는 프로퍼티 이름을 지정한다.
|
type
|
Hibernate의 데이터 타입을 지정한다. (Java의 데이터 타입 아님)
|
column
|
테이블의 컬럼명을 지정한다. 생략하면 프로퍼티의 이름이 자동으로 컬럼명으로 지정된다.
|
access
|
프로퍼티에 접근하는 방법을 지정한다. 즉 setter/getter 메서드로 접근할 것인지 직접 field에 접근할 것인지에 대한 설정이다. 루트 엘리먼트의 access설정 보다 우선순위가 높다.
|
<hibernate-mapping package="com.multicampus.biz.vo">
<class name="Board" table="BOARD">
<id name="seq" column="SEQ">
<generator class="native" />
</id>
</class>
</hibernate-mapping>
<generator /> 엘리먼트
영속 객체들에 대한 유일한 식별자를 생성할 수 있는 기능 제공
테이블의 Primay Key 값으로 사용됨.
속성
속성
|
설명
|
class
|
식별자를 생성하는 클래스를 지정한다.
|
generator
generator
|
설명
|
increment
|
Hibernate가 직접 식별자를 생성한다.
|
indentity
|
MySQL, DB2, MS SQL, Sysbase, HypersonicSQL의 식별 컬럼을 지원하며 리턴 타입은 정수 타입이다.
|
sequence
|
오라클, DB2, PostGreSQL의 시퀀스를 사용하며 리턴 타입은 정수 타입이다.
|
hilo
|
hi/lo 알고리즘을 사용하여 정수 타입의 식별자를 생성한다.
|
seqhilo
|
hilo와 동일하지만 시퀀스로부터 hi값을 가져온다.
|
uuid
|
128비트 UUID 알고리즘을 사용하여 문자 타입의 식별자를 생성한다.
|
guid
|
MS SQL과 MySQL에서 데이터베이스 생성 GUID 문자열을 사용한다.
|
native
|
데이터베이스에 따라 자동으로 identity, sequence, hilo 중 한가지를 사용한다.
|
assigned
|
<generator/> 생략 시 디폴트 값이며 직접 식별키를 입력한다.
|
foreign
|
연관된 클래스의 식별자를 사용한다.
|
<property /> 엘리먼트
영속 클래스의 식별을 위한 속성 이외에 나머지 속성의 매핑을 수행
속성
|
설명
|
name
|
프로퍼티의 이름을 지정한다.
|
column
|
매핑될 테이블의 컬럼명을 지정한다. 생략할 경우 프로퍼티의 이름과 동일하게 설정한다.
|
type
|
Hibernate 의 타입을 지정한다.
|
update
|
update 시 SQL에 포함될지 여부를 지정한다. (기본 : true)
|
insert
|
insert 시 SQL에 포함될지 여부를 지정한다. (기본 : true)
|
formula
|
컬럼의 값을 계산하여 프로퍼티에 저장하는 SQL 표현식을 지정한다.
|
access
|
프로퍼티에 접근하는 방법을 지정 한다.
|
lazy
|
늦은 로딩을 사용할지의 여부를 설정합니다. (기본 : false)
|
unique
|
unique 제약조건을 설정한다. true로 설정하면 property-ref로 참조하는 것을 허용한다. (기본 : false)
|
not-null
|
null 가능 여부를 설정한다. true 면 not null 이다. (기본 : false)
|
generated
|
매핑되는 컬럼이 데이터베이스에 의해 변경되는지 여부를 설정한다. 즉 테이블에 insert나 update이후 해당 컬럼의 값을 읽어와서 객체에 반영한다.
|
length
|
데이터의 길이를 지정한다.
|
Annotation 설정 매핑
설정 정보가 많아지고 복잡해지는 경우 많은 시간과 노력 소요
설정과 관련된 메타데이터를 소스코드와 같이 작성 -> Annotation
@Entity
@Id
@Table
@Column
@SequenceGenerator
@GeneratedValue
@Transient
예제
@Entity
@Table(name="E_BOARD",
uniqueConstraints={@UniqueConstraint(columnNames={"SEQ", "TITLE"})})
public class Board implements Serializable {
@Id
@SequenceGenerator(name="boardSequence", sequenceName="BOARD_SEQ",
initialValue=1, allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="boardSequence")
@Column(name="BOARD_SEQ", nullable=false, length=5)
private int seq;
@Column(name="BOARD_TITLE", nullable=false, length=30)
private String title;
@Column(name="BOARD_CONTENT", updatable=false)
private String content;
@Column(name="BOARD_REG_DATE")
private Date regDate;
}
'It' 카테고리의 다른 글
파이썬 문자열,산술연산자,비교연산자 (0) | 2022.11.07 |
---|---|
버스 중재 (0) | 2022.11.05 |
제우스 , 도메인, DAS, MS, 노드, 노드매니저 (0) | 2022.10.24 |
예외처리 (0) | 2022.10.22 |
클래스 멤버변수 선언시 (0) | 2022.10.20 |
- Total
- Today
- Yesterday
- 러브 라이프 예고편
- 하나님의 마음 무료보기
- 한국영화
- 러브 라이프 토렌트
- 하나님의 마음 다운로드
- 외국영화
- 하나님의 마음 정식자막
- 하나님의 마음 고화질
- 러브 라이프 다운로드
- 박스오피스
- 실시간검색어
- 러브 라이프 한글자막
- 하나님의 마음 다시보기
- 하나님의 마음 한글자막
- 영화
- 영화소개
- 하나님의 마음 토렌트
- 러브 라이프 정식자막
- Movie
- 실검
- 오늘의사건
- 러브 라이프 무료보기
- 옛날영화
- 추천영화
- 영화추천
- 영화순위
- 하나님의 마음 바로보기
- 하나님의 마음 마그넷
- 오늘의이슈
- 하나님의 마음 예고편
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |