💻dev/🌱Java+Spring

JPQL이란? JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어이다. SQL과 문법이 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원 JPQL은 엔티티 객체를 대상으로 쿼리(SQL은 데이터베이스 테이블을 대상으로 쿼리) SQL을 추상화 했기 때문에 특정 데이터베이스 SQL에 의존하지 않는다. 예시) //검색 String jpql = "select m from Member m where m.age > 18"; List result = em.createQuery(jpql, Member.class) .getResultList(); 실행된 SQL select m.id as id, m.age as age, m.USERNAME as USERNAME, m.TEAM..
이 예제를 이해하기 위한 개념 https://un-lazy-midnight.tistory.com/102 JPA | 기본값 타입과 임베디드 타입이란? JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, String처럼 un-lazy-midnight.tistory.com https://un-lazy-midnight.tistory.com/103 JPA | 값 타입은 변경이 가능할까? 불변 객체(immutable object)란? (+ 값 타입을 비교하는 방법) 지난 글에서는 값 타입에 대해 알아보았다. https://un-lazy-midnight.tistory.com..
이 예제를 이해하기 위한 개념 https://un-lazy-midnight.tistory.com/99 JPA | 프록시(Proxy)란? 제대로 알고 쓰자! 프록시란 무엇일까? em.find()는 데이터베이스를 통해 실제 엔티티 객체를 조회한다면 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 이게 무슨 말이냐면... 프 un-lazy-midnight.tistory.com https://un-lazy-midnight.tistory.com/100 JPA | 즉시 로딩(FetchType.EAGER)과 지연 로딩(FetchType.LAZY) FetchType이란? JPA가 하나의 Entity를 조회할 때, 연관관계에있는 객체들을 어떻게 가져올 것이냐를 나타내는..
값 타입 컬렉션이란? 값 타입을 하나 이상 저장할 때 사용한다. 컬렉션을 저장하기 위한 별도의 테이블이 필요하다. 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다. @ElementCollection, @CollectionTable 을 사용한다. 값 타입 컬렉션 정의 예제 코드) public class Member { @Id @GeneratedValue private Long id; @Column(name="USERNAME") private String name; @Embedded private Address homeAddress; @ElementCollection @CollectionTable(name = "FAVORITE_FOOD", joinColumns = @JoinColumn(name = "M..
지난 글에서는 값 타입에 대해 알아보았다. https://un-lazy-midnight.tistory.com/102 JPA | 기본값 타입과 임베디드 타입이란? JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, String처럼 un-lazy-midnight.tistory.com 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 값 타입 공유 참조 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. 사이드 이펙트 발생 예) 위와 같이 한쪽 회원의 city 값만 변경하고 ..
JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 기본 값 타임 자바 기본 타입(int, double), 래퍼 클래스(Integer, Long), String 생명주기를 엔티티에 의존한다. 예) 회원을 삭제하면 이름, 나이 필드도 함께 삭제 값 타입은 공유하면 안된다. 예) 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안 됨 참고로 자바의 기본 타입은 절대 공유되지 않는다. in..
영속성 전이: CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶을 때 예: 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하는 경우 @OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST) 주의사항 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다. 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공할 뿐이다. 단일 소유자일 때 사용하는 것이 좋다. CASCADE의 종류 ALL: 모두 적용 PERSIST: 영속 REMOVE: 삭제 MERGE: 병합 REFRESH: 리프레쉬 DETACH: 분리 고아 객체 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 의미한다. 고아 객체 제거: 부모 엔티티와..
FetchType이란? JPA가 하나의 Entity를 조회할 때, 연관관계에있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값 JPA는 사용자가 직접 쿼리를 생성하지 않고, JPA에서 JPQL을 이용하여 쿼리문을 생성하여 객체와 필드를 보고 쿼리를 생성 다른 객체와 연관관계 매핑이 되어있으면 그 객체들까지 조회하게 되고, 이 경우 이 객체를 어떻게 불러올 것인가를 설정할 수 있음 즉시 로딩과 지연로딩 즉시 로딩: fetch = FetchType.EAGER 데이터를 조회할 때 모든 연관된 객체의 데이터까지 한꺼번에 불러온다. 지연 로딩: fetch = FetchType.LAZY 필요한 시점에 연관된 객체를 불러온다. 지연 로딩 LAZY를 사용하여 프록시로 조회 Team의 프록시를 가져오고 추후 실제 te..
쁜새
'💻dev/🌱Java+Spring' 카테고리의 글 목록 (6 Page)