본문 바로가기

Back-End/JPA

Spring JPA 이슈 모음

1. detached entity passed to persist

@Table(name = "good_base")
@NoArgsConstructor
public class GoodsBase implements Serializable {

	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(updatable = false, name = "good_idx")
    private Long goodsId;
    
    
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "good_idx", referencedColumnName = "good_idx")
    private List<GoodsOption> goodsOptions;
}

다음과 같은 Entity가 있는데 goodsOptions 을 insert 할 때 다음과 같은 에러가 발생하였다.

detached entity passed to persist:

특정 엔티티를 영속 상태ㅐ로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶다면 cascade 를 이용한 영속성 전이 기능을 사용한다.

  • CascadeType.PERSIST : 엔티티를 생성하고, 연관 엔티티를 추가 하였을 때 persist()를 수행하면 연관 엔티티도 함께 persist() 수행 된다. 만약 연관 엔티티가 DB에 등록된 키 값을 가지고 있다면 detached entity passed to persist Exception이 발생한다.

해결

@ManyToOne (cascade = CascadeType.MERGED)

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:

3. org.springframework.orm.ObjectOptimisticLockingFailureException

org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1