본문 바로가기

JPA/JPA18

[JPA] JPQL - 기본 문법 1. JPQL이란? 엔티티 객체를 조회하는 객체지향 쿼리이다. 문법은 SQL과 비슷하고 ANSI 표준 SQL이 제공하는 기능을 유사하게 지원한다. SQL은 데이터베이스 테이블을 대상으로 JPQL은 엔티티 객체를 대상으로 쿼리 한다. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. 2. JPQL 기본 문법 select_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] SELECT, UPDATE, DELETE 문 사용할 수 있다. INSERT 문은 EntityMana.. 2022. 1. 7.
[JPA] 값 타입 JPA의 데이터 타입 (1) 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능하다. ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 (2) 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가능하다. ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입의 종류 기본값 타입 (basic value type) 자바 기본 타입 (ex. int, double) Wrapper Class (ex. Integer) String 임베디드 타입 (embedded type) 컬렉션 값 타입 (collection value type) 1. 기본값 타입 @E.. 2022. 1. 4.
[JPA] 영속성 전이(CASCADE)와 고아 객체 제거 1. 영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만든다. (1) 영속성 전이 : 저장 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) private List childList = new ArrayList(); public void addChild(Child child) { childList.add(child); child.setParent(this); } } cascade = CascadeType.AL.. 2022. 1. 3.
[JPA] 즉시 로딩과 지연 로딩 1. 즉시 로딩 (EAGER Loading) 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; } @ManyToOne (fetch = FetchType.EAGER) 지정함으로써 즉시 로딩 선언 //즉시 로딩 Member findMember = em.find(Member.cl.. 2022. 1. 3.
[JPA] 프록시 (Proxy) 1. 프록시의 필요성 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. Member findMember = em.find(Member.class, member.getId()); System.out.println(findMember.getName()); //System.out.println(findMember.getTeam().getName()); 만약 회원 엔티티만 출력하는 사용하는 경우 em.find()로 회원 엔티티를 조회할 때 회원과 연관된 팀 엔티티까지 데이터베이스에서 함께 조회해 두는 것은 효율적이지 않다. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다. 지연 로딩 기능을 사용하려면 실제 엔티.. 2022. 1. 3.
[JPA] @MappedSuperclass @MappedSuperclass 테이블과 매핑하지 않고 단순히 매핑 정보를 상속할 때 사용된다. 상속관계 매핑이 아니다. 엔티티가 아니고 테이블과 매핑되지 않는다. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. @MappedSuperclass @Getter @Setter public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } @Entity @Getter @Setter public class Member extends BaseEntity{ @Id .. 2022. 1. 3.
반응형