inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 데이터 JPA

JPA 프로그래밍 5. 엔티티 상태와 Cascade

영속성 공부하다가 궁금한게 생겼습니다 .

해결된 질문

615

blossom_mind

작성한 질문수 51

0

class A 

{

  @GeneratedValue

  @Id

  private Long id; 

}

일떄 아래 run 메서드에서 

@Transactional

@Component

public class JpaRunnerManyToMany implements ApplicationRunner {

@PersistenceContext

EntityManager entityManager;

@Override

public void run(ApplicationArguments args) throws Exception {

A a1 = new A1();

a1.setId(1l); <== 해당 부분 에러가 뜨는데요
a1.setUsername("test");

entityManager.persist(1L);

이경우 detached entity passed to persist 에러가 생기는데요

제가 강의를 들을떄 persist()를 할떄 비로소 1차캐쉬에 들어가서 jpa가 관리중인 상태가 된다고 들었는데 그렇다면 
persist()하기 전에 1L을 id로 셋팅을 하고 persist()와 동시에  영속성상태로 올라갔을떄 @GeneratedValue 라는 어노테이션이 주키의 자동생성을 위한것이라고 들었는데 그렇다면 1L로 persist 메소드를 적용했을떄 1l이 이미 있으면 @GeneratedValue가 적용이 안되서 에러가 발생하는것일까요. 

해석하면 detached entity passed to persist

detach가 persist상태로 넘겨졌다라는걸로 해석되는데 

만약에 A a = new A();
a.setId(1L);  로 entityManager.persist(a); 실행하면 정확히 어떤흐름으로 가는지 궁금합니다 .

JPA java spring

답변 1

2

백기선

@GeneratedValue가 적용이 안되서라기 보다는 문맥적으로 id를 자동생성하겠다고 선언하셨는데 id를 직접 정해놓고 persist를 호출하면 JPA는 해당 객체가 detached 상태의 객체라고 생각합니다. detached 객체는 이미 이전에 한번 영속화 되었던 적이 있는 객체, 즉 이 경우에는 id를 가지고 있는 객체면 그렇게 생각합니다. detached 객체를 다시 영속화 하려면 persist가 아니라 merge를 사용해야 합니다.

JPA에 대한 학습을 하셔야 합니다. JPA에서 다루는 영속화 객체의 상태 변화와 각 오퍼레이션들을 학습하는 시간을 갖길 바랍니다.

spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴

0

532

1

<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문

0

392

1

comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?

0

406

1

@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?

0

450

0

PersistenceContext 관련 질문드립니다.

0

334

1

지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다

0

338

1

transaction 구간이 길어질 경우의 처리방법 문의드립니다.

0

905

1

docker postgres

0

291

1

Multiple DataSource 사용 시 transaction 관련 질문 드립니다.

0

2908

1

entity 중 null이 아닌 필드만 update 할 방법이 있을까요?

0

1190

1

Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?

0

385

1

엔티티를 상속받는 DTO가 일반적인가요?

1

1847

1

커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.

0

339

1

연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.

0

566

4

EntityManager 주입시 Annotation관련 질문드립니다.

0

565

1

클래스 기반 프로젝션 사용 관련 질문

0

560

1

save 메서드 질문드립니다.

0

258

1

복잡한 통계쿼리도 JPA로 가능한가요?

2

5592

1

find 와 get의 차이가 무엇인가요?

0

890

1

실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?

0

998

1

\dt Did not find any relations.

0

481

1

소스코드는 어디서 볼 수 있을까요?

1

287

1

table 생성과 select 문에 대한 질문

0

172

1

스프링 데이터 RepositoryTest 관련 질문

0

2172

2