반응형 Spring32 [Spring Boot/JPA] JPA와 MongoDB 병행 시 @Transactional 설정 주의점 (멀티 트랜잭션 매니저) 문제프로젝트에서 MySQL(JPA)과 MongoDB를 함께 사용하는데MongoDB를 사용한 테스트 중 테스트는 잘 되지만 롤백이 안되는 현상을 겪었다 @Configurationpublic class MongoConfig { @Bean MongoTransactionManager mongoTransactionManager(MongoDatabaseFactory dbFactory) { return new MongoTransactionManager(dbFactory); }}그래서 찾아보니 MongoDB의 롤백을 위해 MongoTransactionManager를 빈으로 등록해서MongoDB도 트랜잭션을 사용하니 테스트시 롤백이 잘 되었다그런데, 이번엔 잘 돌아가던 JPA 기반의 회원 테.. 2026. 1. 9. [Spring/JPA] N+1과 @OneToOne LEFT JOIN N+1문제 해결@Entity(name = "Users")public class User { @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id")) @Enumerated(EnumType.STRING) @Column(name = "role") private Set roles = new HashSet();}@ElementCollection(fetch = FetchType.EAGER) 사용으로 권한을 가져올 때 편하지만N+1 발생: 유저 10명을 조회하면 각 유저 쿼리 1번 + 각 유저의 권한을 가져오는 쿼리 10번.. 2026. 1. 5. [Spring/JPA] JPA에서 UNIQUE 제약조건 예외가 언제 발생하나? @Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true) private String userId; ...}userId를 UNIQUE 제약조건을 설정해서 중복일 때 DB 레벨에서 예외 발생하는 테스트를 해보려고 함 테스트 A (명시적 flush() 사용)userService.join(user1);em.flush();assertThrows(Exception.class, () -> { userService.join(user2); em.flush();}); em.flush()로 DB에 INSERT가 나가므로.. 2025. 12. 12. [Spring/JPA] Spring Boot + JPA 페이징 문제 발생@GetMapping("/users") public ResponseEntity> getUsers() { Page users = userRepository.findAll(); Page list = users.stream().map(user -> new UserDto(user.getUserId(), user.getPassword(), user.getEmail(), user.getNickname(), user.getRoles(), user.getOauth_provider(), user.getCreatedAt(), user.getUpdatedAt())); return Respon.. 2025. 12. 11. [Spring/JPA] Entity + Lombok Builder 사용 시 컬렉션 필드 초기화 주의점 문제 상황@Entity@Builder@NoArgsConstructor@AllArgsConstructorpublic class TripRecommendation { @OneToMany(mappedBy = "tripRecommendation", cascade = CascadeType.ALL, orphanRemoval = true) private List itinerary = new ArrayList(); ... public void addItinerary(Itinerary item) { itinerary.add(item); item.setTripRecommendation(this); }}JPA 엔티티에서 List 같은 컬렉션을 사용할 때 보통 이렇게 초기화.. 2025. 11. 26. [Spring/MyBatis] No constructor found in ~ matching 오류 문제 상황java.lang.Exception: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in egovframework.root.tossPayment.dto.OrderDto matching [java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String]MyBatis를 사용하여 selectPayment 쿼리를 실행할 때 다음과 같은 예외가 발생했습니다. OrderDto.java@Builder@AllArgsConstructor(access = AccessLevel.P.. 2025. 2. 10. 이전 1 2 3 4 ··· 6 다음 반응형