반응형
스프링 데이터 JPA의 Query method 에서 엔티티의 연관 엔티티의 필드를 가져오는 한 방식을 알게 되었다.
@Getter
@Entity
@Table(name = "likes")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Like {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "todocard_id")
private TodoCard todoCard;
private Boolean isLike;
@Builder
private Like(User user, TodoCard todoCard) {
this.user = user;
this.todoCard = todoCard;
this.isLike = true;
}
}
@Getter
@Entity
@Table(name = "users") // MySQL 에서 USER 는 예약어이므로 s를 붙임
@NoArgsConstructor(access = AccessLevel.PROTECTED) // JPA 에서는 기본 생성자가 필요하므로 최소 접근제어자로 생성
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true, length = 10) // 4자 이상, 10자 이하
private String username;
@Column(nullable = false, length = 60) // 평문은 8자 이상, 15자 이하이지만, BCrypt 암호화 시 60자로 늘어남
private String password;
@Column(nullable = false)
@Enumerated(EnumType.STRING) // ORDINAL 로 하면 정수로 저장이 되므로 이후 Role 추가 시 문제 생길 여지 있음
private UserRoleEnum role;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Like> likeList = new ArrayList<>();
private User(String username, String password, UserRoleEnum role) {
this.username = username;
this.password = password;
this.role = role;
}
public static User createUser(String username, String password) {
return new User(username, password, UserRoleEnum.USER);
}
}
이렇게 Like 엔티티와 User 엔티티가 있다고 할 때, Like의 User 엔티티의 username 으로 Like를 조회하고자 한다면 다음과 같이 작성할 수 있다.
public interface LikeRepository extends JpaRepository<Like, Long> {
Like findByUser_Username(String username);
}
이렇게 Like의 연관관계로 있는 User의 username 필드를 가져오고 싶을 때는 User 하고 언더스코어 _ 이후 그 엔티티의 필드명을 적어주면 된다.
반응형
'TIL ✍️' 카테고리의 다른 글
23년 12월 26일(화요일) - 59번째 TIL (0) | 2023.12.26 |
---|---|
23년 12월 22일(금요일) - 58번째 TIL (1) | 2023.12.22 |
23년 12월 20일(수요일) - 56번째 TIL : 레포지토리 단에서 예외 발생 (0) | 2023.12.20 |
23년 12월 19일(화요일) - 55번째 TIL : 영속성 전이 및 고아 객체 (0) | 2023.12.19 |
23년 12월 18일(월요일) - 54번째 TIL : QueryDSL (0) | 2023.12.18 |