인프런 커뮤니티 질문&답변

임익주님의 프로필 이미지
임익주

작성한 질문수

실전! 스프링 데이터 JPA

네이티브 쿼리

매핑 테이블 값 변경

작성

·

292

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

EntityAId와 EntityBId를 받아서 EntityAEntityB 매핑테이블의 a라는 변수의 값을 변경시키려면 어떻게 해야 할까요? EntityA와 EntityB를 각각 조회하고 EntityA의 EntityAEntityBList를 돌면서 EntityB인걸 찾으면 DB에 쿼리가 너무 많이 날아갈거같은데 이런 문제는 어떻게 해결 해야 하나 의문이 들어 질문 드립니다.

답변 2

1

안녕하세요, 인프런 AI 인턴입니다.

임익주님, 매핑 테이블에서 특정 변수의 값을 변경하려는 경우 일반적으로 다음과 같은 단계를 거치게 됩니다:

  1. 강의 내용과 관련된 질문인가요? (예/아니오)
  2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
  3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

말씀하신 문제를 해결하는 한 가지 방법은 JPQL이나 Criteria API를 사용하여 엔티티를 직접 조회하는 대신에 조인을 활용하여 필요한 매핑 데이터만 선택적으로 조회하는 것입니다. 이렇게 하면 EntityA와 EntityB를 개별적으로 조회한 후 모든 연결된 매핑을 순회하는 것보다 효율적으로 데이터를 처리할 수 있습니다.

예를 들어, 다음과 같은 JPQL 쿼리를 사용하여 특정 EntityAId와 EntityBId에 해당하는 매핑 데이터를 조회하고 업데이트할 수 있습니다:

@Query("SELECT m FROM EntityAEntityB m WHERE m.entityA.id = :entityAId AND m.entityB.id = :entityBId")
EntityAEntityB findMappingByIds(@Param("entityAId") Long entityAId, @Param("entityBId") Long entityBId);

@Transactional
public void updateValue(Long entityAId, Long entityBId, ValueType newValue) {
    EntityAEntityB mapping = findMappingByIds(entityAId, entityBId);
    if(mapping != null) {
        mapping.setA(newValue);
    }
}

이 코드는 특정 EntityAIdEntityBId를 받아서 EntityAEntityB 매핑 테이블에서 해당하는 엔티티를 찾아 a 변수의 값을 변경하는 예시입니다.

또한, 김영한님의 ‘실전! 스프링 데이터 JPA’ 강의 자료의 자주 하는 질문 링크 또는 질문 잘하기 메뉴얼 링크에서 관련 내용이 있는지 먼저 확인하시는 것이 좋습니다. 추가 정보가 필요하다면 구체적인 내용과 함께 인프런 게시판에 질문을 등록하시면 답변을 받으실 수 있습니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 임익주님

우선 @ManyToMany를 사용한 상황이라면 앞서 JPA 기본편 강의에서 설명드린 것 처럼 @OneToMany, @ManyToOne의 관계로 풀어내야 합니다. 쉽게 이야기해서 EntityAEntityB를 별도의 엔티티로 만들어야 합니다.

그리고 AI 인턴의 설명과 같이 EntityAEntityB를 조회하는 방식으로 처리하시면 됩니다.

감사합니다.

임익주님의 프로필 이미지
임익주

작성한 질문수

질문하기