일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- spring kakfa
- Stream
- 쿼리실행순서
- 스트림
- Java
- 오라클쿼리테스트사이트
- dto매핑우선순위
- IntelliJ
- sql사이트
- spring cloud stream
- 자바
- sql 테스트 사이트
- ls -lgaf
- 쓰기지연sql저장소 쿼리실행순서
- Oracle
- 쿼리실행사이트
- JPA
- 포트앤어댑터 아키텍처
- Kafka
- 설치없이쿼리실행
- Flush
- 쿼리사이트
- port&adapter architecture
- 컬럼명중복
- 중복컬럼dto매핑
- error 2002 (hy000): can't connect to local mysql server through socket '/tmp/mysql.sock' (2)
- 쓰기지연저장소
- hibernate 쿼리실행 순서
- 쿼리테스트사이트
- group by group by rollup 차이
- Today
- Total
목록Flush (2)
개린이 탈출기
JPA 를 활용하여 데이터를 관리하는 중인데 동일한 unique key 에 대한 delete 와 save 메서드를 사용하였더니 Duplicate Key 문제가 발생하였다. 결론적으로는 jpa를 통해 delete 관련 메서드를 호출해도 db에 동기화가 바로 일어나지 않고(직접 flush를 하거나 db 동기화가 일어나도록 하지 않는다면) 쓰기 지연 SQL 저장소에 쌓아두고 나중에 isnert 문과 함께 Db에 쿼리문을 보내준다. 이때 dbms 가 쿼리를 실행하기 전에 각 쿼리를 평가(최적화 및 실행 계획 등..)하는 과정에서 uniqueKey가 중복되는 insert문이 존재하므로 여기서 문제가 발생했던 것이다. 문제 원인실제 코드는 다음과 같다.public class MyEntity { @Id ..
jpa 와 jdbcTemplate 을 함께 사용 중인데, Jpa로 엔티티를 조회해온 뒤, jdbcTemplate 으로 데이터를 수정하고 해당 값을 다시 조회하여 사용하는 과정에서 반영된 값을 db에서 다시 조회해와야만 하는 케이스가 발생했다. 예를 들어 jpa로 조회해온 A 테이블의 a1 엔티티를 수정하는데, A 테이블의 전체 개수(max 값) 를 A테이블의 serial_Number 컬럼에 저장해주어야 한다.이때, 전체 개수를 조회해오는 로직을 자바로 풀지 않고, 서브쿼리로 넣어 사용했다. 이러한 경우 다음과 같은 문제가 발생할 수 있다. 1. jpa 를 통해 a1 를 조회하면 a1은 영속성 컨텍스트에서 관리 됨 2. 이때, 조회해 온 'a1`의 `serial_Number` 의 컬럼 값을 수정하여 upd..