엔티티의 동등성 비교법비즈니스 키를 사용해 equals() 메서드를 오버라이딩해야함프록시와 동등성 비교 문제단순 원본 엔티티끼리의 비교에서는 IDE 나 외부 라이브러리가 제공한 equals 로 충분하지만..프록시 객체와의 비교에서는 문제가 발생함@Entity public class Member { @Id private String id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null..
N+1?연관된 엔티티를 로드할 때 발생한다.한 개의 쿼리로 N 개의 엔티티를 로드 후각 엔티티와 연관된 다른 엔티티들을 로드하기 위해추가적으로 N 번의 쿼리를 수행하게 됨.최종적으로 N + 1 의 호출이 발생하는 것이다.예제로 알아보자@Entity public class Member { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List orders = new ArrayList(); } @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue private Long id; @ManyToOne p..
엔티티의 데이터를 데이터베이스에 저장할 때 변환하는 역할을 수행한다.Java 의 boolean 타입을 데이터베이스에 문자열 ‘Y’ 혹은 ‘N’ 으로 저장할때.. 사용한다고 함.분석DB 테이블 생성CREATE TABLE MEMBER ( ID VARCHAR(255) NOT NULL, USERNAME VARCHAR(255), VIP VARCHAR(1) NOT NULL, PRIMARY KEY (ID) )회원 엔티티@Entity public class Member { @Id private String id; private String username; @Convert(converter=BooleanToYNConverter.class) private boolean vip; // Getter, Setter }@Con..
JPA 사용 환경의 비교J2SE 환경개발자가 엔티티 매니저 생성 및 트랜잭션 관리가 필요하다스프링/J2EE 컨테이너컨테이너가 제공하는 전략을 따라야 한다.스프링 컨테이너의 기본 전략트랜잭션 범위의 영속성 컨텍스트트랜잭션을 시작하는 경우영속성 컨텍스트를 생성종료시영속성 제거구현@Transactional 어노테이션스프링의 트랜잭션의 관리트랜잭션 AOP메서드 호출 전트랜잭션 시작메서드 정상 종료트랜잭션 커밋 및 종료영속성 플러시변경내용을 DB에 반영예외가 발생하는 경우트랜잭션을 롤백하고 , 플러시를 호출하지 않는다.코드예제@Controller class HelloController { @Autowired HelloService helloService; public void hello() { // 반환된 mem..
준영속 상태와 지연 로딩엔티티의 생명주기데이터 접근 전략 등을 설명준영속 + 트랜잭션범위의 영속성스프링이나 J2EE 컨테이너는 트랜잭션 범위 영속성 컨텍스트를 기본 전략으로 사용서비스 계층에서 시작된 트랜잭션 종료시영속성도 종료엔티티가 서비스와 레포 계층에서 영속 상태를 유지하지만,프레젠테이션 (컨트롤러 뷰 등) 에서는 준영속 상태가 됨지연로딩과 준영속 상태준영속 상태에서는엔티티 변경감지지연 로딩이 동작하지 않음코드@Entity public class Order { @Id @GeneratedValue private Long id; @ManyToOne(fetch = FetchType.LAZY) // 지연 로딩 전략 private Member member; // 주문 회원 }class OrderControl..
준영속 상태와 지연 로딩엔티티의 생명주기데이터 접근 전략 등을 설명준영속 + 트랜잭션범위의 영속성스프링이나 J2EE 컨테이너는 트랜잭션 범위 영속성 컨텍스트를 기본 전략으로 사용서비스 계층에서 시작된 트랜잭션 종료시영속성도 종료엔티티가 서비스와 레포 계층에서 영속 상태를 유지하지만,프레젠테이션 (컨트롤러 뷰 등) 에서는 준영속 상태가 됨지연로딩과 준영속 상태준영속 상태에서는엔티티 변경감지지연 로딩이 동작하지 않음코드@Entity public class Order { @Id @GeneratedValue private Long id; @ManyToOne(fetch = FetchType.LAZY) // 지연 로딩 전략 private Member member; // 주문 회원 }class OrderControl..