Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

1:1 연관관계 - 1 본문

JPA

1:1 연관관계 - 1

Seung__ 2021. 6. 17. 21:50
 

ERD(Entity Relationship Diagram)

ERD는 Entity의 연관관계를 도식화한 표현이다. diagram을 통해 entity들의 연관 관계를 쉽게 파악할 수 있다. 1. 관계 표기법 2. 다이어그램 예시 * PK : primary key * FK : foreign key

bsh-developer.tistory.com

 

Entity Listener : 4(실제 사용하는 방법)

좀 더 현실적으로 코드를 수정해보자. createdAt, updatedAt에 각각 @CreatedDate, @LastModifidedDate 붙여주고, @AuditingEntityListener를 활용하여 간단하게 적용할 수 있었다. 하지만 각 class의 createdAt,..

bsh-developer.tistory.com

 

이전 글에 이어서  계속 진행!

 

안타깝게도 기존에 만들었던 entity의 관계중에 1:1은 없다.

 

따라서 book과 1:1관계인 book_review_info를 만들어 주자.

 

해당 entity는 book의 정보를 가지고 와서 리뷰 평점이나 리뷰 수를 알려준다.

 

 

1. 시작하기 전에


 

본격적인 코딩에 앞서 이전에 작성한 코드를 살짝 수정해주자.

 

이전에 작성한 Book, User, UserHistory는 모두 Auditable을 구현했었다.

public class Book extends BaseEntity implements Auditable{

Auditable interface의 역할은 리스너가 createdAt, updatedAt을 알고있도록 하기 위함이다.

 

그리고 해당 class모두 BaseEntity를 상속을 받는다. 따라서 굳이 Auditable을 따로 구현할 것이 아니라

 

BaseEntity에서 구현하면 덜 귀찮을 것 같다.

 

public class Book extends BaseEntity {

 

 

2. BookRebiewInfo class

이제 어느정도 익숙해졌다. 여기서 float과 Float의 차이는 null 허용 여부다.

float는 null 허용하나 Float은 그렇지 않다.

@Entity
@NoArgsConstructor
@Data
public class BookReviewInfo extends BaseEntity{

    @Id
    @GeneratedValue
    private long id;

    private long bookId;

    private float averageReviewScore;
    //flot, FLOT 차이? null 허용 여부

    private int reviewCount;


}

 

3. BookReviewInfoRepository

public interface BookReviewInfoRepository extends JpaRepository<BookReviewInfo, Long> {


}

 

4. Test code

@SpringBootTest
class BookReviewInfoRepositoryTest {

    @Autowired
    private BookReviewInfoRepository bookReviewInfoRepository;

    @Test
    void crudTest(){
        BookReviewInfo bookReviewInfo = new BookReviewInfo();

        bookReviewInfo.setBookId(1L);
        bookReviewInfo.setAverageReviewScore(4.5f);
        bookReviewInfo.setReviewCount(2);


        bookReviewInfoRepository.save(bookReviewInfo);

        System.out.println(">>>>>>>>>>" + bookReviewInfoRepository.findAll());
    }
}

 

5. 결과

응??? createdAt, updatedAt 어디감?

>>>>>>>>>>[BookReviewInfo(id=6, bookId=1, averageReviewScore=4.5, reviewCount=2)]

 

6. Lombok annotation 수정

짠  @Data에 에러가 발생했다.

 

이전 글에서 처럼 annotation 추가를 해줘야 한다.

 

ToString(callSuper = true) : 상속받는 클래스(super class)의 정보를 ToString에 포함

EqualsAndHashCode(callSuper = true) : euqals, hashcode method 자동 생성 시 super class고려

@Entity
@NoArgsConstructor
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class BookReviewInfo extends BaseEntity{

 

7. 결과

오 잘 나왔당.

>>>>>>>>>>[BookReviewInfo(super=BaseEntity(createdAt=2021-06-17T21:31:56.158865, 
          updatedAt=2021-06-17T21:31:56.158865), id=6, bookId=1, 
          averageReviewScore=4.5, reviewCount=2)]

'JPA' 카테고리의 다른 글

1:1 연관관계 - 2  (0) 2021.06.20
mappedBy()  (0) 2021.06.20
Entity Listener : 4(실제 사용하는 방법)  (0) 2021.06.16
Entity Listener : 3(@AuditingEntityListener)  (0) 2021.06.16
Entity Listener : 2  (0) 2021.06.16
Comments