PK값을 이미가지고 있는 Entity를 DB에 저장하는 방법 문의
3417
작성한 질문수 9
안녕하세요. Jpa린이 입니다.
좋은 강의 감사합니다.
MSA형태로 Application을 구성하려고 합니다.
아래와 같은 경우에 2번DB에 save할때 Jpa가 내부적으로 pk를 가지고 먼저 select하는것 같은데, 2번DB에는 당연히 해당데이터가 없으니 에러가 발생하는 군요.
PK 값을 가지고 있지만 select없이 바로 저장하게 할 수 있을까요?
--아래--
1번DB와 2번DB의 위치는 다르지만, 테이블구조와 데이터는 동일해야합니다.
Eqp1Tr과 Eqp1TrDet는 1:N 구조입니다.
1번 App
- 1번 DB에 저장 -> Kafka Publish (ID포함)
2번 App
- Kafka Consume (ID포함) -> 2번 DB에 저장
<2번 App Consumer 와 Service 코드>
@KafkaListener(topics = "${app.topic.name}", groupId = "${spring.kafka.consumer.group-id}")
public void receiveMessage(@Payload Eqp1Tr eqp1Tr,
@Header(KafkaHeaders.RECEIVED_TOPIC) String topic,
@Header(KafkaHeaders.RECEIVED_PARTITION_ID) Integer partition,
@Header(KafkaHeaders.OFFSET) Long offset) {
log.info("Received message: data = {}, topic = {}, partition = {}, offset = {}", eqp1Tr, topic, partition, offset);
eqp1TrService.createTr(eqp1Tr);
}
public Eqp1Tr createTr(Eqp1Tr eqp1Tr) {
log.info("eqp1Tr : {} {}", eqp1Tr.getEqp1TrDets(), eqp1Tr.getName());
List<Eqp1TrDet> eqp1TrDets = eqp1Tr.getEqp1TrDets().stream()
.collect(Collectors.toList());
// Save at Eqp1Tr, Eqp1TrDet
trRepository.save(eqp1Tr);
trDetRepository.saveAll(eqp1TrDets);
return eqp1Tr;
}
<Error>
...
Hibernate:
select
eqp1trdet0_.id as id1_1_0_,
eqp1trdet0_.createdBy as createdb2_1_0_,
eqp1trdet0_.createdDate as createdd3_1_0_,
eqp1trdet0_.col1 as col4_1_0_,
eqp1trdet0_.col2 as col5_1_0_,
eqp1trdet0_.tr_id as tr_id6_1_0_
from
Eqp1TrDet eqp1trdet0_
where
eqp1trdet0_.id=?
2021-04-24 00:05:45.319 TRACE 19496 --- [ntainer#0-0-C-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2]
2021-04-24 00:06:25.719 INFO 19496 --- [ntainer#0-0-C-1] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer-tr-consumer-service-1, groupId=tr-consumer-service] Seeking to offset 3 for partition eqp.tr.ic.eqp1-0
2021-04-24 00:06:27.013 ERROR 19496 --- [ntainer#0-0-C-1] essageListenerContainer$ListenerConsumer : Error handler threw an exception
org.springframework.kafka.KafkaException: Seek to current after exception; nested exception is org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method 'public void me.kalpha.trconsumerservice.trmart.service.Eqp1TrConsumerService.receiveMessage(me.kalpha.trconsumerservice.trmart.entity.Eqp1Tr,java.lang.String,java.lang.Integer,java.lang.Long)' threw exception; nested exception is org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find me.kalpha.trconsumerservice.trmart.entity.Eqp1TrDet with id 2; nested exception is javax.persistence.EntityNotFoundException: Unable to find me.kalpha.trconsumerservice.trmart.entity.Eqp1TrDet with id 2; nested exception is org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find me.kalpha.trconsumerservice.trmart.entity.Eqp1TrDet with id 2; nested exception is javax.persistence.EntityNotFoundException: Unable to find me.kalpha.trconsumerservice.trmart.entity.Eqp1TrDet with id 2
...
답변 1
0
안녕하세요. 허당더기님
다음 질문을 참고해주세요.
https://www.inflearn.com/questions/197446
혹시 해당 내용이 이해가 어려우면 JPA 기본편 강의를 꼭 들으시길 추천합니다.
감사합니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
64
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
99
3
MemberRepository 구현체
0
54
1
pdf 표현 질문드립니다.
0
59
1
로그가 남지 않는 문제.
0
78
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
67
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
68
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
87
2
Sort 인터페이스는 잘 사용 안하나요?
0
50
1
스캔대상 질문드립니다.
0
45
1
하이버네이트6에서의 최적화에 이은 질문
0
81
1
save() vs saveAndFlush DB 통신 횟수
0
50
1
순수 JPA 리포지토리 코드 수정부분
0
85
2
bulk연산 후 flush하는 이유를 모르겠어요
0
147
3
bulk insert 질문입니다.
0
174
2
교만했던 것 같아요.
0
142
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
143
2
동적 테이블에 대한 질문
0
84
1
영속성 전이와 연관관계
0
128
2
강의 10:25 질문
0
71
1
단건 update 질문
0
94
2
엔티티 와 도메인의 경계
0
124
1
UsernameOnlyDto 타입 type mismatch 오류
0
114
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
131
1





