티스토리 뷰

* 전반적으로 이것저것 많이 나열한 포스트

http://wonwoo.ml/index.php/post/2181

 

JPA 까먹지 말자! (2)

오늘은 저번시간에 이어서 JPA 까먹지 말자! (2) 를 시작해보자. JPA라 했지만 구현체는 hibernate 기준으로 설명하니 다른 구현체들은 조금씩 다를 수도 있으니 참고하면 되겠다. 또한 종종 hibernate 이야기도 있을 수도 있다. @GeneratedValue strategy JPA에서는 @GeneratedValue 어노테이션의 strat…

wonwoo.ml

 

테이블 A 를 Ta 라 함.

테이블 B를 Tb 라 함. 이후 모두 같은 패턴.

 

* OneToOne 기본

Ta <- Tb 연결하려면

1. Tb 에 taId(컬럼 선언)

2. Tb 클래스에 다음 선언

@OneToOne
 @JoinColumn(name = "taId")
Ta ta;

 

 * 양방향 OneToOne, 

Ta에는 Tb를 가르키는 컬럼이 없고

Tb 에만 Ta 를 가리키는 컬럼 만드는 경우.

1. Tb 에 taId(컬럼 선언)

2. Tb 클래스에 다음 선언

@OneToOne 
 @JoinColumn(name = "taId") 
Ta ta;

 

3. Ta 클래스에 다음 선언

@OneToOne(mappedBy = "ta") 
Tb tb;

여기서 ta 는 Tb.ta 를 의미함. (컬럼명 taId 를 쓰지 않음)

 

* Lazy 선언 

@Lazy

또는 

@OneToOne(fetch = FetchType.LAZY)

- 종전 버전에서 Lazy 선언시 세션 연결 안 되어있으면 get 에 실패하는 등의 오류 보였으나,

최근 버전은 별 문제 없이 사용 가능.

... 안 먹히는데?

=> 1:1 은 lazy 위해 다른 방법 있는듯 (@LazyToOne)

http://wonwoo.ml/index.php/post/1566

 

hibernate OneToOne lazy 구현하기

오늘이 시간에는 JPA OneToOne 관계에서 lazy 로딩 구현을 해보자. 일반적으로 JPA에서 OneToOne 관계는 Lazy로딩이 잘 동작하지 않는다. 물론 동작하게 만들 수는 있다. 여러 조건을 만족해야 하며 테이블 구조도 조금 달라 질 수 있다. 또한 OneToOne을 OneToMany로 바꾸어서 사용하는 방법도 존재한다. 위와 같이 여러 …

wonwoo.ml

 

 

- 지연로딩 EM 사용하여 구현한 예제

https://lng1982.tistory.com/278

 

* 예전 버전 코드를 그대로 사용할 수 있는가? 

 

* SQL 로그 보는 방법?

spring.jpa.show-sql=true  
spring.jpa.properties.hibernate.format_sql=true

 

* Foreign Key 하나를 객체와 ID 로 별도로 가지고 있을 수 있는가?

 

* 리스트로 가져올때 FK 객체는 한번에 연결되는가? 

 

* 하나의 개체를 여러군데서 불렀을때, 그 개체는 동일한가?

Ta.tc 

Tb.tc

tc 가 동일한 ID 가진 개체라면, 자바에서도 동일한 객체인가?

=> YES. 같은 주소임을 확인함.

 

* set /  get 시에 바로 저장되는 방법?

 

* 관계 설정 위해 테이블에서 Foreign key 선언이 필요한가?

종전 버전에는 FK 를 선언했어야 했으며, 따라서 FK 없는 MyISAM에는 사용 불가능 했으나

최근 버전에는 상관없이 작동 간으

 

 

* @Data 와 @Entity 의 차이는 뭐지?

https://lng1982.tistory.com/278

 

* @Basic 은 뭐여

http://wonwoo.ml/index.php/post/category/jpa

 

* 연관관계 맺을때 프록시 사용

ta.tb를 set 하기 위해

tb를 가져올때 find() 를 이용하면 DB 쿼리가 한번 일어나서 비효율적이다.

이걸 막기 위해 em.getReference()  이용하면 프록시 객체만 받아옴.

http://wonwoo.ml/index.php/post/category/jpa

 

* @NamedQuery 이용하여 쿼리 그대로 사용 가능.

 

* persist 와 merge

persist 는 키값 없어야 함.

merge는 상관없음.

 

persist 후에는 set 시에 동시에 업데이트를 하지만

merge 시에는 set을 해도 업데이트 하지 않으며, merge() 수행후 리턴받은 객체에 set() 하면 그건 바로 업데이트 됨

 

* OneToMany 에 @Lazy 와 @BatchSize(size =5 ) 를 넣으면 in 이용하여 5개씩만 가져옴

http://wonwoo.ml/index.php/post/975

 

JPA n+1을 해결하는 방법

이번에는 JPA의 n+1을 해결하는 방법을 한번 살펴보자. n+1의 예를 한번들어보자. 어떤 Account 라는 엔티티와 Order라는 엔티티가 있다고 가정하자. @Entity public class Account { @Id @GeneratedValue @Column(name = “ACCOUNT_ID”) private Long i…

wonwoo.ml

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   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
글 보관함