영속성 컨텍스트란 엔티티를 영구히 저장하는 환경을 말한다.1) 비영속 (new) : 영속성 컨텍스트와 전혀 관계가 없는 상태2) 영속 (managed) : 영속성 컨텍스트에 저장된 후 관리되는 상태.3) 준영속 (detached) : 영속성 컨텍스트에서 관리되었다가 관
JPA 사용시, 엔티티 클래스를 만들어줘야 한다. 엔티티에 자주 사용하는, 꼭 써야하는 어노테이션들은 무엇인지 알아보자.
Entity 클래스를 작성할 때 어노테이션을 많이 씁니다. 아래와 같이 많이 쓰게 되는데요.이 어노테이션에서 문제 3가지가 보입니다. 이를 개선하기 위해 해결방법을 정리해봅니다.Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의
주로 배송지, 주소 등같이 필수적으로 묶어야 하는 것들은 아예 객체로 묶어서 관리한다.ex. 이름, 도시, 주소 번지, 주소 우편번호@Embeddable 를 붙여주면주소 임베디드 타입을 생성하기 위해 주소 클래스가 생성되고@Embedded 를 붙여 회원에 이식(임베디드
OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 유지되면 엔티티도 영속 상태로 유지된다. 뷰까지 영속성 컨텍스트가 살아있다면 뷰에서도 지연 로딩을 사용할 수가 있다.OSIV의 동작 방식에 대해서 Sprin
1) BaseTimeEntity 생성2) extends BaseTimeEntity 추가Board(BaseTimeEntity를 상속할 엔티티 클래스)3) @EnableJpaAuditing 추가SpringbootBoardExampleApplication
1) EagerLoading : 특정 엔티티를 조회할 때 연관된 모든 엔티티를 같이 로딩, 즉시 로딩이라고 합니다.즉시 로딩은 연관된 엔티티를 모두 가져온다는 장점이 있지만,실무에서 엔티티간의 관계가 복잡해질수록 조인으로 인한 성능 저하를 피할 수 없게 됩니다.JPA에
JPA Pagination, 그리고 N + 1 문제뻥튀기 되는 문제 + distinct 해결법 정리결론 2번째 방식을 선호! 서브쿼리도 MySQL 에서 지장을 주기 때문에!
JPA를 쓸 때 연관관계로 인한 매핑문제로 무한참조(@XToOne)가 생길 수 있다. 이를 막기 위해default인 EagerLoading을 LazyLoading으로 거는데 여기서 문제가 생길 수 있다.바로,Lazy는 기본적으로 실제 객체가 아닌 프록시 객체를 감싸져
JPA 를 사용하면서 Team -> Member 와 같이 OneToMany -> ManyToOne 과 같은 양방향 관계를 가지는 구조에서 많이 발생하는 Json 순환참조에 대해서 알아보자.Json 순환참조는 양뱡향 관계에서 객체를 직렬화 하는 과정에서 양쪽 모두 직렬화
DBMS가 지원해주는 트랜잭션 외 JPA에서도 트랜잭션 처리기버을 소개한다.Pessimistic(선점) Lock(잠금): 비관적 잠금Optimistic(비선점) Lock(잠금): 낙관적 잠금DDD 참고JPA 프로바이더와 DBMS에 따라 잠금 모드의 구현이 다른데, 하이
Product 엔티티ProductImage실제 DB 상의 필드
ProductRepositoryselectList 반환 객체로 Tuple을 사용할 것이다.여러 객체를 한번에 sql로 호출하기 위해 많이 사용한다. (특히 Collection 필드 가져올 때)Page 객체 내 제네릭 타입으로는 일단 Object를 선정해주고Product