JPA 5

InvalidDataAccessApiUsageException : detached entity passed to persist

JPA 엔티티가 영속성 컨텍스트에서 분리된 상태에서 persist를 호출해서 영속성 컨텍스트에 저장하려고 하니 발생한 오류다.memberPostRepository.saveAndFlush 메서드를 사용하여 MemberPost 엔티티를 영속성 컨텍스트에 저장해서 해결했다.2024-06-28T17:10:50.080+09:00 DEBUG 5097 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.backend.kiri.domain.MemberPost]20..

Spring & SpringBoot 2024.06.28

JPA기본편 - 엔티티 매핑 (연관관계 매핑)

데이터 중심 설계의 문제점 기본 매핑 예제를 보면 데이터베이스 테이블의 외래키를 객체에 그대로 가져오며 테이블 설계에 객체를 맞춘 것을 볼 수 있다. @Entity @Table(name = "ORDERS") //order가 예약어로 걸려있는 경우가 있어서 ORDERS로 많이 쓴다. public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @Column(name = "MEMBER_ID") private Long memberId; //누가 주문했는지. private LocalTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus Status; } 그리고 ..

JPA 2023.04.05

JPA기본편 - 엔티티 매핑 (객체와 테이블, 필드와 컬럼, 기본 키 매핑)

데이터베이스 스키마 자동 생성 jpa에서는 DDL을 애플리케이션 실행 시점에 자동으로 생성해준다. 데이터베이스 방언(dialect)을 이용해서 데이터베이스에 맞는 적절한 DDL을 생성한다. 그리고 이렇게 생성된 DDL은 개발 장비에서만 사용하고 운영서버에서는 사용하지 않는다. (사용하더라도 다듬고 사용) hibernate.hbm2ddl.auto 옵션 create 기존 테이블 삭제 후 다시 생성 (drop + create) create-drop create와 같으나 종료 시점에 테이블 drop update 변경분만 반영(운영 DB에는 사용하면 안됨!) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음. 운영장비에는 절대 create, create-drop, update를 사..

JPA 2023.04.01

JPA기본편 - 영속성 관리

엔티티 매니저 팩토리와 엔티티 매니저 고객의 요청이 올 때마다 엔티티매니저를 생성하고, 이 엔티티 매니저는 데이터 커넥션을 사용해서 db에 접근하게 된다. 영속성 컨텍스트란? 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경이다. 논리적인 개념으로 눈에 보이지는 않고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. //엔티티를 영속성 컨텍스트에 저장한다. EntityManager.persist(entity); 엔티티 생명주기 1. 비영속 (new/transient) = 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2. 영속 (managed) = 영속성 컨텍스트에 관리되는 상태 3. 준영속 (detached) = 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제 (removed) = 삭제된 상태 ..

JPA 2023.04.01

JPA기본편 - JPA소개와 기본 개념

JPA란? JAVA Persistence API. 객체와 관계형데이터베이스의 차이때문에 생기는 SQL의존적인 개발을 피하기 위해 사용하는 자바 진영의 ORM 기술 표준! 애플리케이션과 JDBC 사이에서 동작하며, 프로그래머가 객체중심으로 데이터베이스에 접근하며 개발할 수 있도록 도와준다. JPA 구동 방식 객체와 테이블을 생성하고 매핑하기 @Entity는 jpa가 관리할 객체를 알려주고, @Id는 데이터베이스의 pk와 매핑된다. //객체생성 @Entity public class Member { @Id private Long id; private String name; } //테이블생성 create table Member ( id bigint not null, name varchar(255), primar..

JPA 2023.03.31