hibernate-envers사용해서 History남기는 테이블이 있는데 update시에 오류가 난다 @_@?
insert는 잘했는데... 나한테 왜그래 ㅠ_ㅠ
오류내용 일부
HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry '81981' for key 'PRIMARY'], SQL: insert into entity_aud (rev_type, a, b, c, d, e, f, id, rev_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
Duplicate entry '81981' for key 'PRIMARY'
Unable to perform beforeTransactionCompletion callback: org.hibernate.exception.ConstraintViolationException: could not execute batch; nested exception is org.hibernate.HibernateException: Unable to perform beforeTransactionCompletion callback: org.hibernate.exception.ConstraintViolationException: could not execute batch
> 오류사유 : 중복값이 저장될려그런다.
> 오류 원인 : entity_aud테이블 (entity의 history테이블)의 id는 entity의 id와 같다. 따라서 수정/삭제등의 history를 쌓으려면 entity_aud테이블의 primary key는 id값만으로 가져가면 안됨. 근데 우리 entity_aud테이블의 primary key가 그냥 id값만 가지고 있었음.
> 문제해결
entity_aud테이블의 primary key를 id -> id+rev 값으로 변경
아니.. 자동으로 생성될때 PK에 id+ rev가 기본인거 같은데 누가 바꿨나... ㅠ_ㅠ
오늘 삽질 끝.
참고
envers설정 (application.yml)
https://stackoverflow.com/questions/16701109/do-i-need-a-id-column-in-audit-table
'Back-End > java' 카테고리의 다른 글
Java8 Predicate를 사용하는 이유 (0) | 2022.05.18 |
---|---|
MAC에서 JAVA환경변수 변경하기 (Java버전변경) (0) | 2021.05.22 |
Java 이전 버전 다운 URL (0) | 2021.05.22 |
HttpServletResponse.getHeader 메소드 없다면 서블릿 버전 확인 (1) | 2021.02.12 |
댓글