July 13, 2023
DB에서는 복합키 설정이 되어 있지만 jpa 에서 복합키 설정을 하지 않은 경우
// Agency 는 여행사
// Restaurant은 식당
@Entity
public class AgencyRestaurantRelation {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long relationIdx;
private Long agencyIdx;
private String restaurantId;
// 생략
public interface AgencyRestaurantRelationRepository extends JpaRepository<AgencyRestaurantRelation, Long> {
// 생략
}
데이터 예시
relationIdx, agencyIdx, restaurantId의 값이 각각
위처럼 있다고 가정했을 경우 AgencyRestaurantRelation 테이블의 데이터를 여러건 조회했을 때.
제일 처음 조회가 된 것이 데이터A라면, 그 후에 데이터B, 데이터C는 key값인 1과 동일하다고 판단해 그대로 데이터 A로 간주해서 데이터A 로 덮어버린다. 그래서 아래와 같은 상황이 된다.
@Entity
@IdClass(AgencyRestaurantRelationKey.class)
public class AgencyRestaurantRelation {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long relationIdx;
@Id
private Long agencyIdx;
@Id
private String restaurantId;
// 생략
}
@Embeddable
public class AgencyRestaurantRelationKey implements Serializable {
private Long relationIdx;
private Long officeIdx;
private String storeId;
}
public interface AgencyRestaurantRelationRepository extends JpaRepository<AgencyRestaurantRelation, AgencyRestaurantRelationKey> {
}