작성
·
36
0
안녕하세요 프로젝트를 하고 있는 대학생입니다. 이렇게 글을 쓸 때 중복체크가 되게 할려면 어떻게 카테고리 리를 설정해야 할지 몰라 글을 남깁니다.
저같은 경우 계층형으로 설계하면 어떨까 했지만 이거는 선택항목(boolean 값)을 넣지 못해 상위항목 하위항목 으로 나누어서 설계를 했습니다. 검색시 여러개 조인으로 가져오는 거 가능해서
이럴경우 상위는 FieldCategoryEntity안에
enum으로 해서 각 계층을 표현했고
하위 항목(SubCategory)
post ->fieldCategory(enum) -> FieldCategoryEntity(상위항목)->SubCategory(하위항목)
이런식으로 매핑을 했습니다 . 하지만 이런식으로 할경우
하나만 True이면 저장이 되지만 여러개가 TRUE일 경우 저장 자체에 문제가 있습니다.
실제 api 테스트 결과 이럴 경우 중복체크로 여러군데 저장 할 수 있고 boolean isSelected로
필터링 할때 여러군데 저장한것을 가져올려면 도대체 설계를 어떻게 해야 해나요?
꼭 boolean이 아니더라도 다른 방법이 있으시면 감사하겠습니다. 제발 도와주세요 ㅠㅠ
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
hjun16님께서 제기하신 중복 저장 문제와 관련하여 몇 가지 해결책을 제안해드릴 수 있습니다:
유일성 제약 조건 추가: 데이터베이스에서 특정 컬럼이나 컬럼 조합에 대해 유일성 제약 조건을 설정하면, 동일한 값이 중복으로 저장되지 않도록 할 수 있습니다. 이는 JPA 엔티티에서도 적용 가능하며, 엔티티 필드에 @UniqueConstraint
를 설정하여 해당 문제를 처리할 수 있습니다.
비즈니스 로직에서 중복 체크: 엔티티 저장 전에 서비스 레이어에서 중복 여부를 직접 체크하는 방법입니다. 예를 들어, 특정 조건이 충족되는 데이터가 이미 존재하는지 확인한 후, 있다면 새로 추가되지 않도록 하는 것입니다.
다중 선택 불가 처리: 만약 비즈니스 로직 상 특정 항목에 대해 하나의 항목만 선택하도록 강제하고 싶다면, UI 레벨에서 체크박스를 라디오 버튼으로 교체하여 사용자가 하나의 항목만 선택할 수 있도록 변경하는 것도 고려할 수 있습니다.
enum을 활용한 상태 관리: 현재 boolean 필드로 선택 여부를 기록하고 계신데, 엔티티에 별도의 enum을 사용하여 상태를 더 명확하게 구분할 수 있습니다. 예를 들면, SELECTED
, UNSELECTED
, CONFLICT
등의 상태를 정의하여 중복된 선택 상태를 식별하는 데 활용할 수 있습니다.
트랜잭션 관리: 저장 과정에서 트랜잭션을 활용하여 여러 엔티티에 대해 동시에 변경 사항을 확인하고 처리할 수 있습니다. 이 경우, 전체가 올바르게 수행되었을 때만 커밋되며, 중간에 에러가 발생하면 롤백됩니다.
문제가 잘 해결되시길 바라며, 더 구체적인 코드나 상황이 필요하시면 추가 정보를 주시면 더욱 자세히 도와드리겠습니다. 감사합니다!
- Spring Data JDBC - Reference Documentation
감사합니다!!