JPA 사용시
mysql/mariadb 에서 사용하는 on duplicate key update 를 사용할 수 없을까요?
@Id 에 해당하는 데이터가 이미 있다면 update 하거나 skip 하거나 하고 싶은데
어떤 데이터를 '수정' 하려고 할때 update 가 아닌 insert 가 되면서 duplicate key 에러가 발생하네요..
save 하는 로직마다 findById 해서 없을 때만 save 하게 하는것도 이상하고 ㅜㅜ
JPA 사용시
mysql/mariadb 에서 사용하는 on duplicate key update 를 사용할 수 없을까요?
@Id 에 해당하는 데이터가 이미 있다면 update 하거나 skip 하거나 하고 싶은데
어떤 데이터를 '수정' 하려고 할때 update 가 아닌 insert 가 되면서 duplicate key 에러가 발생하네요..
save 하는 로직마다 findById 해서 없을 때만 save 하게 하는것도 이상하고 ㅜㅜ
3개의 의견 from SLiPP
단순히 on duplicate key update만 사용하신다면 위 링크의 @SQLInsert 어노테이션을 사용하시면 될꺼같습니다.
https://stackoverflow.com/questions/913341/can-hibernate-work-with-mysqls-on-duplicate-key-update-syntax
저는 on duplicate key update 보다는 findById 를 한 후 save 를 추천합니다.
각 로직마다 jpa 에서 처리를 하는것도 상당히 복잡한 일이라 생각이 되고 또한 SQL 을 이용한 DB 로직보다는 JPA 기반의 자바 로직이 좀 더 관리하기가 편한거 같아서요.
DB 버전에 따라 다를 수 있는데요, 대규모의 insert ~~ on duplicated key update 에서는 db 부하가 늘어나 해당 로직을 변경하게 된 일도 겪어봤어요.
답변 감사합니다.
findById 후에 save 하니 update 되네요. ^^
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.