반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

샘오리_개발노트

JPA의 Persistence와 @Transient 이해하기 (feat. EL1008E) 본문

카테고리 없음

JPA의 Persistence와 @Transient 이해하기 (feat. EL1008E)

샘오리 2024. 4. 5. 15:35
728x90
반응형

: EL1008E: Property or field '문제의 칼럼' cannot be found on ........ - maybe not public or not valid?

 

Transient "일시적인"

Temporary의 동의어


JPA에서 언급하는 Persistence "영속성"과 반대되는 개념이다.

영속성이란 사라지지 않는 데이터의 특성이다.

영속성을 갖지 않으면 데이터는 메모리에서만 존재하게 되고 프로그램이 종료되면 모두 사라지게 된다.

우리는 이렇게 영속성을 가져야 하는 데이터를 DB에 저장한다.

 

그러면 일시적인의 의미를 갖고 있는 저 Transient를 어노테이션으로 썼다는 것은 무엇일까?

메모리에서만 존재해야 하는, 프로그램이 종료되면 사라져도 무방한 목적의 칼럼이라고 볼 수 있다.

예컨데 DTO 에 어떤 목적으로 DB에 없는 칼럼을 포함시켜야 한다고 가정해보자.

 

그렇다면 그 DTO에 포함된, 존재하지 않는 칼럼은, 그 DTO 가 호출될 때 마다 같이 호출이 되며

실제로 DB에 그 칼럼이 있는지 없는지 조회를 하게 된다. 헌데 DB에는 없다. 그럼 에러를 뱉어내게 된다.

 

: EL1008E: Property or field '문제의 칼럼' cannot be found on ....... - maybe not public or not valid?

 

우리는 이것을 원치 않는다. 왜? 애초에 DB에 없는 칼럼이지만

해당 DTO에 같이 선언해서 메모리에서만 사용되고 사라지길 바라는 임시 칼럼이기 때문이다.

 

그러면 어떻게 ORM에서 자동으로 DB에 존재하는 칼럼인지 체크하는 절차를 무시하고 저 에러를 피해갈 수 있을까?

 

바로 @Transient 로 해결할 수 있다.

@Transient
private String DB에없는칼럼;

 

이렇게 선언하게 되면 JPA나 QueryDSL같은 ORM이 쿼리를 짤 때 해당 칼럼은 DB에 존재하는 칼럼인지 체크를 하는 과정을 하지 않고 예외로 처리한다.

728x90
반응형
Comments