티스토리 뷰

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