-
JpaSystemException개발 일지 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; } }
'개발 일지' 카테고리의 다른 글
서버 도메인 없이 EC2 서버에 https 적용하기 (0) 2024.09.07 메소드 오버라이딩시 super 키워드 조심하기 (0) 2024.08.16 @Bean vs @Component (0) 2024.08.16 DB 작업시 @Transactional는 항상 써야할까? (0) 2024.06.28 동일한 bean으로 등록되는 문제 (0) 2024.06.27