전체 글 43

JPA 트랜잭션 커밋 에러

에러 상황음식점 등록 API를 호출해서 클라이언트 요청을 보내면 Postman에서는 200, OK가 뜨는데 DB에 저장이 안된다.ERROR org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction Entity부터 DTO, Controller, Service까지 다 점검하면서 스펠링이 틀리진 않았는지, 값을 잘못 초기화 한게 아닌지, 클라이언트로부터 값을 매핑 및 잘 전달받았는지 로그를 하나하나 찍어보면서 점검해봤는데 문제가 없었다. 에러 원인영업 시간 컬럼을 최초에 String 타입으로 "18:00~02:00" 이런 식으로 받다가 LocalTime으로 openTime, closeTime 구분해서 ..

카테고리 없음 2025.02.20

LazyInitializationException : Lazy(지연 로딩)로 관계가 맺어진 엔티티 가져올 때 발생한 에러

에러 발생 상황1. 음식점 Respository에서 전체 음식이 담긴 리스트를 가져옴2. 해당 리스트를 반환하기 위해 stream으로 순회하면서 Restaurant 객체를 DTO 객체로 매핑3. Repository에서 가져온 음식점 리스트 안에 음식 리스트도 있어서 Food -> FoodDto로 매핑이 필요(@OneToMany로 음식과 연관관계가 맺어져 있는 상태 -> cascade = Lazy(지연로딩))4. Restaurant -> DTO 변환 과정 중 Food 리스트도 FoodDto 타입 리스트로 매핑하기 위해 Restaurant 객체의 .getFoods() 메서드 호출5. LazyInitializationException 발생Resolved [org.hibernate.LazyInitializati..

카테고리 없음 2025.02.20

FetchType, cascade(영속성 전이), orphanRemoval(고아 객체 제거)

📌지연 로딩JPA는 연관관계가 설정된 Entity의 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있다.즉, 가져오는 방법을 정하게되는데 JPA에서는 Fetch Type이라 부른다. Fetch Type의 종류에는 2가지가 있는데 하나는 Lazy, 다른 하나는 EAGER이다.Lazy(지연 로딩) : 필요한 시점에 정보를 가져온다.EAGER(즉시 로딩) : 엔티티를 조회할 때 연관된 모든 Entity 정보를 즉시 가져온다.@ManyToOne은 default가 EAGER(즉시 로딩)이다.@OneToMany는 default가 Lazy(지연 로딩)이다 쉽게 외우는 방법은 관계를 설정하는 애너테이션에서 To 뒤가 Many면 Lazy(지연 로딩), One이면 EAGER(즉시 로딩)이다. 왜냐하면 To 뒤가 M..

카테고리 없음 2025.02.18

Entity 연관 관계

Entity(엔티티)의 연관 관계는 하나의 Entity가 다른 Entity와 관계를 맺는 것을 의미한다.즉, 데이터베이스에서 Entity 간의 연결 구조를 정의하는 개념이다.Entity의 연관 관계를 설정하는 이유는 데이터의 효율적인 관리와 활용을 위해서다.연관된 Entity의 방향이란?Entity는 다른 Entity를 외래 키(FK)로 참조하여 그 Entity의 정보를 조회할 수 있다.만약 A라는 Entity와 B라는 Entity가 있을 때 A와 B가 서로의 정보를 조회할 수 있는지, 또는 A에서만 B를 조회할 수 있거나 B에서만 A를 조회할 수 있다면 방향의 개념이 생긴다. 양방향 : A와 B의 엔티티 서로가 서로의 정보를 조회할 수 있다.단방향 : A만 B를 조회할 수 있거나, B만 A를 조회할 수..

카테고리 없음 2025.02.17

JPA과 Spring Data JPA

JPA는 자바 ORM 기술에 대한 대표적인 표준 명세이다.이를 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트이며 스프링부트에서는 기본적으로 하이버네이트 구현체를 사용중이다. ORM(Object-Relational-Mapping)이란 JAVA 객체와 DB의 관계를 매핑 해주는 기술ORM이 왜 필요함 ? 👉 Java 객체랑 DB 데이터를 직접 매핑하려면 매우 귀찮음 👉 ORM을 사용하면 이 귀찮은 과정들을 자동으로 처리해줌. (매우 귀찮은 과정)1. DB 테이블 만들기2. 애플리케이션에서 SQL문 작성3. SQL을 JDBC 사용해서 DB 조작 메서드 실행4. 응답 결과를 JAVA 객체(DTO)로 만들어줘야함📌EntityEntity란 JPA에서  관리되고 있는 클래스(객체)를 의미함 👉 DB의 ..

카테고리 없음 2025.02.09