Troubleshooting

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) 해결

suebinmon 2025. 2. 12. 20:53
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

 

간단하게 JPA를 사용하여 API를 만들었는데 해당 에러가 발생하였다.

 

원인은

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

로 만들고 swagger에서 또 id에 값을 주고 동작시켜서 였다.

 

Swagger

이렇게 하면 이렇게 하면 JPA가 이 엔티티가 이미 존재하는 것으로 판단하고, merge()를 수행한다.

즉:
findById(1L) 조회 → 없다면 INSERT
save() 호출 후 JPA가 엔티티 상태를 다시 감지 → update 실행 가능

 

id에 값을 null을 주면 insert가 잘 된다. 나는 User.java에 @JsonIgnore 어노테이션을 붙여서 id는 노출 안되게 수정하였다.

 

User.java

 

UserController.java

 

UserService.java

 

UserRepository.java