JPA3 [Spring Tip] 엔티티 설계시 주의점 Setter Setter가 열려있다면 프로젝트 사이즈가 커진 뒤 유지보수가 굉장히 어렵다. 모든 연관관계는 지연로딩으로 설정!!! (중요) 즉시 로딩(EAGER)을 사용한다면 연관된 모든 테이블을 로딩해야한다. 따라서 지연 로딩(LAZY)로 설정하고 사용해야 한다. 만약 연관된 엔티티를 함께 조회해야 한다면, fetch join 또는 엔티티 그래프를 사용한다.(n+1문제?) ! ManyToOne은 default가 EAGER, OneToMany는 LAZY. 따라서 ManyToOne은 LAZY로 fetch 값을 변경이 필수적이다. 초기화와 동시에 메모리 할당을 하는것이 'null' 문제에서 안전하다. best practice. 테이블 네이밍 전략 주로 언더바 전략을 사용하고 스프링에서 카멜케이스와 .을 _로.. 2022. 10. 3. [JPA] 키워드 JPA(java persistence api) 기본 구조 Entity Manager 생성 Entity Manager로 DB 조작 Entity Transaction으로 트랜잭션 관리 Spring과 같이 사용할 때에는 대부분의 작업을 스프링이 알아서 해주기 때문에 매핑 설정과 쿼리를 사용하는 정도의 작업에 사용됨 Entity Manager EntityManagerFactory를 통해 생성 JPQL JPA에서 사용하는 쿼리 영속 컨텍스트 DB에서 읽어온 객체, EM을 통해 생성, 읽어온 객체를 저장하고 있는 일종의 메모리 공간. EntityManager 단위로 영속 컨텍스트 관리 영속 객체를 보관하고 있다가 commit 시점에 DB 값 변경 2022. 10. 2. [JAVA, JPA, SPRING] 어노테이션 모음집 @SpringBootApplication - 해당 어노테이션이 존재하는 패키지와 하위 패키지를 모두 스캔함. @Entity - DB 테이블과 매핑 대상임을 알림 @Id - primary key @GeneratedValue - auto increment @Column - 매핑할 column과 변수 명이 다를 경우 지정 가능 @ManyToMany @ManyToOne @OneToOne @OneToMany @JoinColumn @Controller @Service - component scan 대상 @Transactional - 쓸 수 있는 옵션이 spring에서 제공하는 어노테이션에 더 많다. 하지만 spring에 종속적이다. class에 어노테이션을 걸면 public 메소드에 모두 적용된다. ReadOnly.. 2022. 9. 30. 이전 1 다음