[JPA] 연관관계 매핑
·
JPA
연관관계 매핑시 고려사항 세가지가 있다.다중성단방향, 양방향연관관계 주인하나씩 차례로 알아보자.  1. 다중성JPA에서 제공하는 어노테이션은 전부 다 DB와 매핑하기 위해 제공한다. 다대일(@ManyToOne)일대다(@OneToMany)일대일(@OneToOne)다대다(@ManyToMany) 2. 단방향 양방향테이블 외래키 하나로 양쪽 조인 가능하다. 그래서 사실 방향이라는 개념이 없다.하지만 객체는 참조용 필드가 있는 쪽으로만 참조 가능하다. 즉, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이다.   3. 연관관계의 주인테이블은 외래키 하나로 두 테이블이 연관관계를 맺는다. 하지만 객체 양방향 관계는 참조가 두곳 다 일어난다. 그래서 두 객체중 테이블의 외래키를 관리할 곳을 지정해줘야 한다. 즉..
[JPA] 엔티티 매핑
·
JPA
1. 객체와 테이블 매핑엔티티 매핑 소개객체와 테이블 매핑: @Table, @Entity필드와 컬럼 매핑: @Column기본 키 매핑: @Id연관관계 매핑: @ManyToOne, @JoinColumn@Entity@Entity가 붙은 클래스가 JPA가 관리, 엔티티라한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity는 필수다.주의 사항기본 생성자 필수final 클래스, enum, interface, inner 클래스 사용불가저장할 필드에 final 사용불가@Table@Table은 엔티티와 매핑할 테이블을 지정할 수 있다.속성기능기본값name매핑할 테이블 이름엔티티 이름을 사용catalog데이터베이스 catalog 매핑 schema데이터베이스 schema 매핑 uniqueConstraintsDD..
[JPA] 영속성 전이 CASCADE, OrphanRemoval = true 이해 및 차이
·
JPA
기술 스택Spring Boot 3.3.5JDK 17H2 DatabaseJPA 개요JPA를 공부하다가 CascadeType.REMOVE와 orphanRemoval = true의 차이점에 대해 헷갈렸다. 둘다 자식 객체의 생명주기를 관리하는 코드이기 때문이였다. 그래서 테스트를 통해 알아보았다.  엔티티 기본 세팅먼저 Parent와 Child 클래스를 생성했다. Parent는 @OneToMany, Child는 @ManyToOne으로 양방향 매핑 했다.// Parent.java@Entity@NoArgsConstructor@Getter@Setterpublic class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long i..
[Spring Boot] Test 클래스에서 lombok을 사용하고 싶을 때
·
Web
bulid.gradle에 다음과 같은 코드를 dependencies에 추가하면 됩니다.  //테스트에서 lombok 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok'
[JPA] JPA와 영속성 컨텍스트란?
·
JPA
1. ORM (Object-Relational Mapping) ORM은 객체 지향 언어에서 관계형 데이터베이스의 데이터를 다루기 위한 기술로, 객체와 관계형 데이터베이스의 테이블간의 매핑을 자동화해주는 방식이다. 데이터베이스의 데이터를 객체 형태로 변환하고, 객체를 데이터베이스에 저장할 수 있도록 함으로써 개발자가 SQL을 직접 작성하지 않게 해준다.  특징객체와 테이블의 매핑: 클래스와 데이터베이스 테이블을 1:1로 매핑하여 객체로 데이터를 다루게 한다.SQL 자동 생성: 데이터를 저장하거나 조회할 때 ORM 프레임워크가 SQL을 자동으로 생성하고 실행한다.데이터베이스 추상화: 특정 데이터베이스에 종속되지 않고, 추상화 계층을 통해 여러 데이터베이스 시스템을 쉽게 변경할 수 있다.  2. JPA (Ja..
[Spring] API 예외 처리
·
Spring Framework
기술 스택JDK 17Spring boot 3.3.5thymeleaf  1. 개요HTML 페이지의 경우 /resources/templates/error 폴더에 4xx.html, 5xx.html 와 같은 오류 페이지만 있으면 BasicErrorController가 대부분의 문제를 해결해준다. 그런데 API의 경우 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만 API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 JSON으로 데이터를 내려주어야 한다. 지금부터 API의 경우 어떻게 예외처리를 하면 좋은지 알아보겠다. 2. 코드 기본 세팅Member.java@NoArgsConstructor@AllArgsConstructor@Datapublic class Member{ ..
스프링 트랜잭션 전파 - 2
·
Spring Transaction
기술스택JDK 17Spring Boot 3.3.5JPA 1. 요구사항회원을 등록하고 조회한다.회원에 대한 변경 이력을 추적할 수 있도록 변경될 때 변경이력을 DB LOG 테이블에 남겨야한다.이 예제는 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다.테스트 전 기본 코드아래는 기본 세팅 코드들이다.Log.java ( Log Entity)@Entity@Getter @Setterpublic class Log { @Id @GeneratedValue private Long id; private String message; public Log() { } public Log(String message) { this.message = message; }}..
스프링 트랜잭션 전파 - 1
·
Spring Transaction
기술스택JDK 17Spring Boot 3.3.5 먼저 들어가기 앞서 로그를 확인하기 위해 application.properties에 다음과 같은 코드를 추가를 하자. logging.level.org.springframework.transaction.interceptor=TRACE logging.level.org.springframework.jdbc.datasource.DataSourceTransactionManager=DEBUG #JPA log logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG logging.level.org.hibernate.resource.transaction=DEBUG #JPA SQL logging.leve..
스프링 트랜잭션 이해
·
Spring Transaction
기술 스택JDK 17GradleSpring boot 3.3.5Spring Data JpaH2 Database  먼저 트랜잭션에 대해 기본적인 설명을 보고싶다면 여기 를 들어가면 된다. 스프링 트랜잭션 소개스프링 트랜잭션 추상화각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다.따라서 JDBC 기술을 사용하다가 JPA 기술로 변경하게 되면 트랜잭션을 사용하는 코드도 모두 함께 변경해야 한다.  스프링은 이런 문제를 해결하기 위해 트랜잭션 추상화를 제공한다. 바로 PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화 한다.PlatformTransactionManager packa..