본문 바로가기

JPA6

Spring Data JPA & QueryDSL 스프링 데이터 JPA ? 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결 할 수있다. 개발자는 인터페이스만 작성하면 된다. 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입한다. 스프링 데이터 JPA 적용 전 public class MemberRepository { public void save(Member member) { ... } public Member findOne(Long id) {...} public List findAll() {...} public Member findByUsername(String username) { ... } } public class ItemRepository { public void save(Member member) { ... } public Me.. 2021. 1. 7.
JPA 내부구조 알아보기 엔티티의 생명주기 비영속(new/reansient) - 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed) - 영속성 컨텍스트에 저장된 상태 준영속(detached) - 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) - 삭제된 상태 영속 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); //객체를 저장한 상태(영속) em.persist(member); 비영속 //객체를 생성한 상태(비영속) Member member = .. 2020. 9. 14.
JPA 사용시 주의사항 정리 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있다. 변경 포인트가 너무 많아서, 유지보수가 어렵다. 모든 연관관계는 지연로딩으로 설정하자 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면 , fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne , ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. 컬렉션은 필드에서 초기화 하자 컬렉션은 필드에서 바로 초기화 하는 것이 안전하다. Null 문제에서 안전하다. 하이버네이트는 .. 2020. 8. 22.
연관관계 매핑 해당 내용은 개발자 김영한 님의 강의 내용입니다. 참고 부탁드립니다. 보통 DTO나 VO를 개발은 이렇게 한다. public Class Member { private String id; private Long teamId; private String userName; } public Class Team { private Long teamId; private String name; } 만약에 객체적인 모델링으로 개발을 한다면... Class Member { String id; Team team; String userName; Team getTeam() { return team; } } Class Team { Long id; String name; } String TEAM_ID = member.getTeam.. 2020. 5. 25.