본문 바로가기
728x90
반응형

Dev170

[JPA] 객체지향 쿼리 언어 - 기본문법 (2) 조인 내부 조인 (INNER JOIN) SQL INNER JOIN과 동일하며 INNER는 생략 가능하다. // 내부조인 (inner 생략 가능) String query = "select m from Member m inner join m.team t"; List result = em.createQuery(query, Member.class).getResultList(); 외부 조인 (LEFT OUTER JOIN) SQL LEFT OUTER JOIN과 동일하며 OUTER는 생략 가능하다. // 외부조인 (outer 생략 가능) String query = "select m from Member m left outer join m.team t"; List result = em.createQuery(query,.. 2021. 9. 8.
[JPA] 객체지향 쿼리 언어 - 기본 문법 (1) 객체지향 쿼리 언어 개요 JPA를 사용하면 엔티티 객체를 중심으로 개발을 하기 때문에 검색 쿼리 실행시에도 테이블 대상이 아닌 엔티티 객체를 대상으로 검색을 해야한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 검색하는 것은 불가능하며 애플리케이션이 필요한 데이터만 가져오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. JPQL JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어 SQL과 문법 유사, ANSI 표준 지원 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 엔티티 객체를 대상으로 쿼리하고 SQL은 데이터베이스 테이블을 대상으로 쿼리한다. 예제 // JpaMain.java List result = em.createQuery("select m From .. 2021. 9. 7.
[JPA] 실습 - 값 타입 매핑 이전 실습에서 값 타입을 매핑해보자 요구사항 Member내 Address값 타입 추가 Delivery내 Address값 타입 추가 엔티티 설계 실습 Entity - Address.java @Embeddable // 임베디드 타입 설정 public class Address { @Column(length = 10) // 컬럼 사이즈 private String city; @Column(length = 20) private String street; @Column(length = 5) private String zipcode; // 의미있는 메소드 구성 가능 public String fullAddress() { return getCity() + " " + getStreet() + " " + getZipcode(.. 2021. 9. 2.
[JPA] 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 ex. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 기본값 타입 종류 자바 기본 타입 (int, double..) 래퍼 클래스 (Integer, Long...) String 특징 생명주기를 엔티티의 의존 (ex. 회원을 삭제하면 이름, 나이 필드도 함께 삭제) 값 타입은 공유하면 안된다. (ex. 회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안된다. 부작용(=.. 2021. 9. 1.
[JPA] 실습 - 연관관계 관리 이전 실습에서 연관관계를 관리해보자 요구사항 글로벌 패치 전략 설정 모든 연관관계를 지연로딩으로 설정 (@ManyToOne, @OneToOne은 기본이 즉시로딩이므로 설정 변경) 영속성 전이 설정 Order -> Delivery : CascadeType.ALL 설정 Order -> OrderItem : CasecadeType.ALL 설정 실습 글로벌 패치 전략, 영속성 전이 설정 - Order.java @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; private LocalDateTime orderDate; @Enumerated(EnumType... 2021. 8. 27.