일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- JPA
- RESTClient
- 30기
- rabbitmq-delayed-message-exchange
- ddd
- Spring
- reactive operaton
- 자바 ORM 표준 JPA 프로그래밍
- 도메인 주도 개발 시작하기
- cicd
- springboot
- 객체지향 쿼리 언어
- Domain Driven Design
- kusitms
- 밋업프로젝트
- jdbc
- JPQL
- 한국대학생it경영학회
- Spring Batch
- delayed message plugin
- 교육기획팀
- 최범균
- 큐시즘
- 교육기획팀원
- 자동처리
- 이펙티브자바
- java
- 영속성
- scheduling messages with rabbitmq
- GitHub Actions
- Today
- Total
목록Backend/JPA (13)
코딩은 마라톤

근황큐시즘 30기를 수료한 후 종강도 맞이하면서, 요새 딱히 바쁘게 지내고 있지 않은 것 같다.무언가를 시작할 때 고민이 많아 "할까, 말까?"를 고민하다가 결국 안 하는 경우가 많아서, 자연스레 바쁘지 않은 생활이 이어지는 듯하다. 그래도 이번에 스터디를 만들어 큐시즘 개발 파트 일부 사람들과 토비의 스프링 3.1 Vol. 1을 읽기로 했다!개발을 하면서 다양한 기술을 배우는 것도 물론 중요하지만, 요즘은 워낙 자료가 풍부해 새로운 기술도 며칠만 투자하면 구현 정도는 가능하다고 생각한다. (나뿐만 아니라 대다수의 개발 경험이 있는 사람들이라면..?)하지만 정작 지금 사용하는 프레임워크인 SpringBoot는 물론, 그 기반인 Spring에 대해 깊이 알고 있느냐는 질문에는 솔직히 "No"라고 답할 수밖..
회사에서 ElasticSearch 조회할 때 CriteriaQuery 만들어봤는데 JPA에도 Criteria 쿼리가 있다니.. 신기방기 CriteriaJPQL을 자바 코드로 작성할 수 있게 도와주는 빌더 클래스 API코드로 JPQL을 작성함으로써 컴파일 단계에서 문법 오류를 잡을 수 있고 동적 쿼리를 안전하게 생성 가능코드가 복잡하고 장황해서 직관적으로 이해하기 힘든 단점 기초//JPQL: select m from Member mCriteriaBuilder cb = em.getCriteriaBuilder(); //Criteria 쿼리 빌더 O//Criteria 생성, 반환 타입 지정CriteriaQuery cq = cb.createQuery(Member.class);Root m = cq.from(Memb..

JPQL 소개JPQL(Java Persistence Query Language)은 엔티티 객체를 조회하는 객체지향 쿼리이다.테이블을 대상으로 쿼리하지 않고 엔티티 객체를 대상으로 쿼리한다.JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다.JPQL은 SQL보다 간결하다.기본 문법과 쿼리 APIJPQL은 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있지만 INSERT는 없다.(엔티티 저장 시 EntityManager.persist() 메서드 사용하기 때문이다.) SELECT 문예시SELECT m FROM Member AS m where m.username = ’Hello' 대소문자 구분엔티티와 속성은 대소문자를 구분하지만, SELECT, FROM과 같은 JPQL..
임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의해서 사용할 수 있다. 이를 임베디드 타입이라 한다. @Entity public class Member { ... // 집 주소 표현 private String city; private String street; private String zipcode; ... } 위 코드에서 회원 엔티티의 집 주소를 나타낼 때, 모든 정보를 풀어서 저장한다. 이는 객체지향적이지 않으며 응집력만 떨어뜨린다. 따라서 풀어쓰지 않고 [집주소]를 가지도록 임베디드 타입을 사용한다. @Entity public class Member { @Embedded Address homeAddress; // 집 주소 ... } @Embeddable public class Addres..
8.1 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 회원 : 팀 = N : 1 회원과 팀의 정보를 출력할 때는 회원과 연관된 팀의 이름을 출력하기 때문에 둘 다 사용한다. 하지만 회원의 정보만을 출력할 때는 연관된 팀 엔티티는 전혀 사용하지 않는다. (함께 조회하는 것은 비효율적이다.) 따라서 JPA는 이런 문제를 해결하고자 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공한다. 이것을 "지연 로딩" 이라 한다. 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이를 "프록시 객체" 라 한다. 8.1.1 프록시 기초 Member member = em.find(Member.class, "member..

7.1 상속 관계 매핑 7.1.1 조인 전략 _ 각각의 테이블로 변환 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략 조회할 때 조인을 자주 사용한다. 타입을 구분하는 컬럼을 추가해야한다. (객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없기 때문) // 부모 클래스 @Entity // 부모 클래스에 @Inheritance를 사용한다. // 조인 전략을 사용하므로 InheritanceType.JOINED를 사용한다. @Inheritance(strategy = InheritanceType.JOINED) // 부모 클래스에 구분 컬럼을 지정한다. // 이 컬럼(DTYPE)을 통해 저장된 자식 테이블을 구분할 수 있다. @Dis..
6.1 다대일 6.1.1 다대일 단방향 [N:1] 회원 엔티티(Member)와 팀 엔티티(Team)는 다대일 관계이다. @Entity public class Member { ... @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entity public class Team { ... @Id @Column(name = "TEAM_ID") private Long id; ... } 회원은 Member.team을 통해 팀 엔티티를 참조할 수 있다. 팀에는 회원을 참조하는 필드가 없기 때문에 다대일 단방향 연관관계다. 6.1.2 다대일 양방향 [N:1] @Entity public class Member { ... @ManyToOne @Join..

목표 : 객체의 참조와 테이블의 외래 키를 매핑하는 것 단방향 연관관계 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. - 객체 연관관계 회원 객체와 팀 객체는 단방향 관계 Member.team 필드로 팀 객체와 연관관계를 맺는다. member -> team의 조회는 가능, 반대는 불가 - 테이블 연관관계 회원 테이블은 TEAM_ID 외래키로 팀 테이블과 연관관계 맺는다. 회원과 팀 테이블은 양방향 관계 (회원, 팀 둘다 조인 가능) - 객체 연관관계와 테이블 연관관계 정리 객체는 참조(주소)로 연관관계를 맺는다. 참조를 사용하는 객체의 연관관계는 단방향이다. 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다. 테이블은 외래 키로 연관관계를 맺는다. 외래 키를 사용하는..