전체 글 206

JPQL

JPQL 소개    • JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.    • JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하 지 않는다.    • JPQL은 결국 SQL로 변환된다.  • 엔티티와 속성은 대소문자 구분O (Member, age)• JPQL 키워드는 대소문자 구분X (SELECT, FROM, where) Entity 이름 사용 ( table name X)@Entity(name = "Member") 별칭은 필수(m) (as는 생략가능)select m from Member as m where m.age > 18  • TypeQuery: 반환 타입이 명확할 때 사용• Query: 반환 타입이 명확하지 않을 때 ..

JPA 2024.08.30

JPA의 다양한 쿼리방법

JPA는 다양한 쿼리 방법을 지원JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 가장 단순한 조회 방법 :  EntityManager.find()     /      객체 그래프 탐색(a.getB().getC()) JPQLJPA를 사용하면 엔티티 객체를 중심으로 개발문제는 검색 쿼리검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공SQL과 문법 유사, SELECT, FROM, WHERE, GRO..

JPA 2024.08.30

JPA 기본 값 타입

JPA의 데이터 타입 분류엔티티 타입 @Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류• 기본값 타입생명주기를 엔티티의 의존값 타입은 공유 X 회원 A 변경시 다른 회원 B의 변경이 일어나서는 안된다.   • 임베디드 타입(embedded type, 복합 값 타입)새로운 값 타입을 정의할 수 있음JPA는 임베디드 타입이라함주로 기본값 타입을 모아서 만든 복합 타입이라고도함int or Spring 같은 값..

JPA 2024.08.28

JPA 고아객체

• 고아 객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티 를 자동으로 삭제• orphanRemoval = true • Parent parent1 = em.find(Parent.class, id); parent1.getChildren().remove(0); //자식 엔티티를 컬렉션에서 제거• DELETE FROM CHILD WHERE ID=? 주의사항 !참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제하는 기능참조하는 곳이 하나일 때 사용해야함!특정 엔티티가 개인 소유할 때 사용@OneToOne, @OneToMany만 가능참고: 개념적으로 부모를 제거하면 자식은 고아가 된다. 따라서 고 아 객체 제거 기능을 활성화 하면, 부모를 제거할 때 자식도 함께 제거된다. 이것은 Ca..

JPA 2024.08.25