티스토리 뷰
* 전반적으로 이것저것 많이 나열한 포스트
http://wonwoo.ml/index.php/post/2181
테이블 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
- 지연로딩 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