일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android
- JDBC
- JPQL
- 자바
- java
- Spring Boot
- Exception
- Servlet
- 김영한
- db
- jpa
- Thymeleaf
- pointcut
- 인프런
- 스프링 핵심 원리
- SpringBoot
- transaction
- Greedy
- kotlin
- 스프링
- 그리디
- 스프링 핵심 기능
- springdatajpa
- http
- 백준
- AOP
- QueryDSL
- Proxy
- spring
- 알고리즘
- Today
- Total
개발자되기 프로젝트
1:1 연관관계 - 1 본문
이전 글에 이어서 계속 진행!
안타깝게도 기존에 만들었던 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 |