자라선

[자바 ORM 표쥰 JPA 프로그래밍] 4일차 - 객체 매핑 및 설정 본문

Develop/JPA

[자바 ORM 표쥰 JPA 프로그래밍] 4일차 - 객체 매핑 및 설정

자라선 2021. 3. 17. 23:56

객체와 데이터베이스를 매핑시켜주기 위해서는 어노테이션을 사용해 명시해주어야한다.

만약 명시되지않은 필드 변수가 있다면 대소문자를 구분하여 자동으로 테이블과 매핑시켜준다.

package jpabook.start;

import javax.persistence.*;  

@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String username;

    private Integer age;

    ... setter & getter
}

 

@Entity

이 어노테이션이 정의된 클래스는 데이터베이스와 매핑 시킬것이라고 명시해준다.

이 어노테이션이 정의된 클래스를 보고 엔티티 클래스라고 부른다.

 

@Table

어떤 테이블과 매핑시킬지 명시해준다.

만약 이 어노테이션이 없다면 자동으로 클래스 이름을 테이블 이름으로 매핑해준다.

 

@Id

테이블의 PK에 해당하는 컬럼을 명시해준다.

이 어노테이션이 정의된 필드를 식별자 필드 라고 부른다.

 

@Column

필드 변수와 테이블의 컬럼을 매핑시켜주기 위한 명시 어노테이션이다.

만약 이 어노테이션이 없다면 자동으로 동일한 명의 필드와 컬럼을 매핑시켜준다.

※ 데이터베이스가 대소문자를 구분한다면 필드와 컬럼 둘다 동일하게 맞춰야한다.


- persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

    <persistence-unit name="jpabook">

        <properties>

            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />

            <!-- 옵션 -->
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.use_sql_comments" value="true" />
            <property name="hibernate.id.new_generator_mappings" value="true" />

            <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
        </properties>
    </persistence-unit>

</persistence>

JPA의 구성이 적혀져있는 설정파일.

 

main/resources/META-INF/persistence.xml 같은 클래스 패스의 위치에 있다면 별도의 설정없이 JPA가 인식한다.

 

persistence

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

설정파일의 가장 기본이 되는 태그이며. xmlns에  xml 네임스페이스version에 사용할 JPA 버전을 정의해준다.

 

persistence-unit

<persistence-unit name="jpabook">

persistence-unit 은 영속성 유닛이라 부르는데 고유한 name으로 데이터베이스당 하나의 유닛이 필요하다.

위 설정파일에서는 h2 하나만 연결하므로 하나만 정의됨

 

properties

        <properties>

            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
            
            ...

 

properties 태그 하위에는 그 데이터베이스의 설정이 입력되어야하는데.

javax.persistence.* 으로 시작되는 속성들은 JPA 표준 속성으로 다른 구현체(hibernate가 아닌 다른 ORM 프레임워크)도 공용하지만 

hibernate.dialect 은 하이버네이트 전용 속성이므로 하이버네이트에서만 사용할 수 있다.(어찌보면 당연하지..)

hibernate.dialect 은 데이터베이스 방언을 설정하는 속성인데 이게 좀 핵심이다.

 

이전 글에서도 설명했듯이 JPA의 장점 중 하나가 데이터베이스에 종속되지 않는다는 점이 있었는데

Mysql이나 ORACLE이나 각각 다른 데이터 타입과 함수를 가지고있기 때문에 데이터베이스를 변경할 때마다 수고스러움이 늘어난다. hibernate는 이부분을 데이터베이스 방언이라고 지칭하고 다양한 방언을 제공하여 설정에서 방언만 수정하면 사용할 데이터베이스를 변경시킬수 있는 굉장한 기능을 제공해준다.

 

https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#configuration-optional-dialects

 

HIBERNATE - Relational Persistence for Idiomatic Java

We will be using Maven in this tutorial, taking advantage of its transitive dependency management capabilities as well as the ability of many IDEs to automatically set up a project for us based on the maven descriptor. Tip It is not a requirement to use Ma

docs.jboss.org

이 문서에서 보면 45개의 다양한 방언을 제공해주고있어 property 속성에

value만 사용할 데이터베이스로 수정해주면된다.

 

Comments