개발 일지

JpaSystemException

apple-tree 2024. 6. 27. 02:05

부트캠프 팀원들과 사이드 프로젝트를 진행하면서 멤버 도메인쪽에서 익명 사용자를 저장하기 위한 로직을 작성하던 중 아래와 같은 오류를 만났다.

 

Request processing failed: org.springframework.orm.jpa.JpaSystemException: Identifier of entity 'com.jeongseok.ormistackoverflowmember.member.infrastructure.MemberEntity' must be manually assigned before calling 'persist()’

 

이 오류 지금 멤버 테이블에 pk값을 DB에 위임해서 생성하는 방식으로 만들었는데 애플리케이션이 시작하는 시점에 pk가 null인 상태로 시작되기 때문에 오류가 발생했다. 문제를 해결하기 위해 다시 내 소스를 자세히 봤다.

 

내가 구현하려던 것은 클라이언트가 서버에 최초 요청을 보낼때 필터에서 사용자를 구분지을 수 있는 별도의 UUID를 생성한 뒤 데이터베이스에 pk 값으로 저장하는 로직을 작성하고 있었다.

@Table(name = "members")
public class MemberEntity {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "member_id")
	private Long id;

	@Column(name = "session_id")
	private String sessionId;
	private String id;

	@Enumerated(EnumType.STRING)
	@Column(name = "role")
	private RoleType role;

 

 

해당 엔티티를 자세보니 pk값을 DB에 위임하게끔 작성해놓은 것이다. 습관적으로 pk값을 저렇게 설정하다보니 이런 문제가 발생했다.

결국 다음과 같이 수정한 후 UUID 값이 저장될 수 있도록 만들었다.

@Entity
@Getter
@Setter
@Table(name = "members")
public class MemberEntity {

	@Id
	@Column(name = "member_id")
	private String id;

	@Enumerated(EnumType.STRING)
	@Column(name = "role")
	private RoleType role;

	@OneToOne(mappedBy = "memberEntity", fetch = FetchType.LAZY)
	private StaffEntity staffEntity;

	public void updateRole(RoleType role) {
		this.role = role;
	}
}

'개발 일지'의 다른글

  • 현재글 JpaSystemException

관련글