본문 바로가기

JPA

2월 3일 JPA 값타입

1.기본값 타입

JPA의 데이터 타입 분류

 

1.엔티티 타입 (최상위)

-@Entity 로 정의하는 객체

-데이터가 변해도 식별자로 지속해서 추적가능

-ex) 회원 엔티티의 키나 나이값을 변경해도 식별자로 인식가능

(값을 변경하더라고 식별자(PK)만 멀쩡하면 추적가능)

 

값타입(최상위)

-int ,Integer , String 처럼 단순히 값으로 사용하는 자바 기본타입이나 객체

-식별자가 없고 값만 있으므로 변경시 추적 불가

ex) 숫자 100을 200으로 변경하면 완전히 다른값으로 대체 

(식별자가 없는 순수값이라서 변경되면 추적이 불가능하다)

(단순 하드코딩 값,)

 

-------------------------------------------------

 

값분류는 크게 3가지

기본값 타입

-자바 기본 타입 (int , double)

-래퍼 클래스 (integer , long) 

-String

 

임베디드 타입 (embeddedType , 복잡한 값 타입)

(좌표 , 우편번호 등 특수한 형태의 값 타입)

컬렉션 값 타입 (Collection Value Type)

(엠베디드 형태의 객체를 받아서 형성하는 값타입)

 

기본 값 타입

ex) String name , int age

생명 주기를 엔티티에 의존

ex) 회원(엔티티)를 삭제하면 이름, 나이 필드도 함께 삭제

(엔티티에 붙어있는 필드를 형성하는 값타입)

 

값 타입은 공유하면 안된다.

ex) 회원 이름 변경시 다른 회원이 이름도 함께 변경되어선 안된다.

 

참고 , 자바의 기본타입 데이터는 절대 공유될 수 없다.

-int , double 같은 기본타입(primary type)는 절대 공유되지 않는다.

-기본 타입은 항상 값을 복사한다.

-Integer 같은 래퍼 클래스나 String 같은 특수한 클래스는 공유 가능한 "객체"지만 변경되지는 않는다.

 

(기본값 과 레퍼런스 값 타입의 차이 , 주소값과 그렇지않은값)

int a = 10;

int b = a

a = 20 

일 때 a를 20으로 변경한다 해도 b에 저장된 a의 값이 변경되지는 않는다. 

b는 a란값을 저장한 시점에서 a와는 관련이없는 개별적인 값이 된다.

 

그런데 

Integer a = new Integer(10);

Interger b = a;

이 경우는 객체b가 객체a의 레퍼런스주소값을 넘겨받는것이기 떄문에 a에 값이 변경되면 b도 변경된다, 

값이 공유되니 변경시 문제(사이드 임팩트)가 발생할 수 있지만 이 값은 변경할 방법이 없다.