이전에 개인 노션에 정리한 내용을 옮겼습니다
모니터링중, 간혹 발생하는 해당 exception 원인을 분석해 보았다.
@Table(name = "chat_room_timescale")
public class ChatRoomTimeScale extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "chat_room_id", referencedColumnName = "id")
private ChatRoom chatRoom;
}
@Table(name = "chat_room")
public class ChatRoom extends BaseEntity implements ICacheKey {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL)
private List<ChatRoomTimeScale> chatRoomTimeScales;
}
ERROR o.h.e.j.batch.internal.BatchingBatch@performExecution(132) - HHH000315: Exception executing batch [org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1], SQL: update `chat_room_timescale` set `request_time`=? where `id`=?
두 개의 서로다른 트랜잭션(스레드)가 동시에 동일한 데이터를 변경하려 할 경우 발생.
존재하지 않는 ID로 레코드를 삭제/업데이트 하려할때 발생
java - 버전 주석 또는 OptimisticLocking 전략없이 ObjectOptimisticLockingFailureException 가져 오기