[SpringBoot] 엔티티 내부 객체를 JPA 레포지토리에서 사용
개요
현재 단방향 관계로 사용중인 엔티티가 있는데,
이 엔티티에서 다른 테이블을 가르키는 객체를 이용해서 정렬을 하는 방법을 정리한다
Entity 관계
현재 엔티티 관계는 다음과 같다
Board(게시글)와 Comment(댓글)에서 좋아요나 싫어요를 할 수 있는데 이를 각각 엔티티에서 담지 않고 Likes라는 테이블에서 관리를 하고자 하였다.
그렇게 할려고 각 Board와 Comment에서 Likes를 단방향관계로 묶어주었다
Entity 코드
코드는 다음과 같으며 주석으로 **표시한 부분을 주로 보면 될 것 같다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| @Getter @Setter @NoArgsConstructor @Entity @DynamicInsert @Table(name = "BOARD") public class Board extends BaseTimeEntity
{
@Column(nullable = false, length = 45) private String gallery;
@Column(nullable = false) private String user;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "content_idx") private Long contentIdx;
@Column(nullable = false, length = 45) private String title;
@Column(columnDefinition = "text", nullable = false) private String content;
@OneToOne(cascade = CascadeType.ALL) private Likes likes; @Column(length = 80, nullable = false) private String password;
@Column(columnDefinition = "tinyint(1) default 0", name = "is_logged_user",nullable = false) private Long isLoggedUser; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| @Getter @Entity @EntityListeners(AuditingEntityListener.class) @DynamicInsert @Table(name = "COMMENT") @NoArgsConstructor public class Comment extends BaseTimeEntity { @Id @Column(name = "comment_idx") @GeneratedValue(strategy = GenerationType.IDENTITY) Long contentIdx;
@Column(name = "board_idx",nullable = false) Long boardIdx;
@Column(nullable = false) String gallery;
@Column(nullable = false) String user;
@Column(nullable = false) String content;
@Column(name = "comment_password",nullable = false,length = 80) String commentPassword;
@Column(columnDefinition = "tinyint(1) default 0",nullable = false,name = "is_logged_user") Long isLogged;
@OneToOne(cascade = CascadeType.ALL) private Likes likes;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Entity @Getter @NoArgsConstructor @DynamicInsert @Table(name= "likes") @IdClass(LikesID.class) public class Likes implements Serializable { @Column(name = "is_comment") @Id private boolean isComment;
@Id @Column(name = "content_idx",nullable = false) private Long contentIdx;
@Column(columnDefinition = "bigint default 0") private Long like;
@Column(columnDefinition = "bigint default 0") private Long dislike;
|
Repository에서 사용
1 2 3 4 5
| public interface BoardRepository extends JpaRepository<Board, Long> { List<Board> findTop10ByOrderByLikesLikeDesc(); }
|
findTop10 : 정렬 기준이 가장 높은 10가지를 가져온다
OrderByLikesLike : Board 엔티티의 Likes 객체의 Like를 기준으로 내림차순 정렬을 한다
마무리
레포지토리에서 객체안의 값을 기준으로 정렬할려면 어떻게 해야하지? 고민했는데
LikesLike처럼 이어서 사용하면 되는 것이었다
참고
https://stackoverflow.com/questions/55579240/spring-data-find-by-property-of-a-nested-object/55579268