QueryDSL??
QueryDSL은 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크이다.
QueryDSL의 장점
- 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
- 자동 완성 등 IDE의 도움을 받을 수 있다.
- 동적인 쿼리 작성이 편리하다.
- 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
잘못된 예제코드와 정상예제코드 작성을 통해 학습해보기
간단하게 entity가 두개가 있다.
이 둘은 양방향 관계이다.
일대다 양방향 관계이다.
Entity01 BookStore
@Entity
@Getter @Setter
public calss BookStore {
@Id @GenerateValue
private Integer id;
private String name;
@OneToMany(mappedBy ="bookStore")
private Set<book> books = new HashSet<>();
//add 메세지로 책을 책방에 추가한 것
void add(Book book){
this.books.add(book);
}
}
Entity02 Book
@Entity
@Getter @Setter
public calss Book {
@Id @GenerateValue
private Integer id;
private String isbn;
private String title;
@ManytoOne
private BookStore;
}
bookStore가 책방에.. 책이 많죠?
책방하나에 책이 여러권이 있습니다
각각 책들은 어떤 책방에 속해 있다.
그래서 ManyToOne으로 책방을 가지고 있다.
책방이 책을 여러개 가지고 있다.
testCode
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoJpaTestApplicationTests{
@Autowired
BookStoreRepository bookStoreRepository;
@Autowired
BookRepository bookRepository;
@Test
public void contexLoads(){
//책방 보이죠?? 책방을 하나 만들고
bookStore bookStore = new BookStore();
bookStore.setName("소피 책방");
bookStoreRepository.save(bookStore);
//책을 만들었다.
Book book = new Book();
book.setTitle("JPA공부 좀 하면서 쓰자");
// 그 다음에 이 책을 책방에다가 추가했어요.
bookStore.add(book);
bookRepository.save(book);
}
}
근데 문제가 생긴다. 저렇게 실행 하면
결과가
book database
id title book_store_id
16 | <null> | <null> |
book_store_id가 설정이 안된다.
book_store database
id name
25 | 소피책방 |
책방에서는 책방에 대한 정보 밖에 없고 연관관계가 매핑 실패.
연관관계 정보가 들어가질 않습니다.
자 이게 문제이다.
양방관계에서 꼭 !! 주의해아하는 점이 있다!
이걸 이해하지 못하고 넘어간다면 데이터가 제대로 저장이 안되거나
데이터가 제대로 삭제가 안되거나 그런일이 비일비재하게 일어난다.
그렇다면 해결 방법은??
댓글로 남겨주세요 .
는 장난이고요 내일 공개합니다..
백기선 선생님께서 위의 잘못된 예제코드에서 잘못된걸 찾지 못하면
그냥 JDBC쓰라고 하시네요 ...
하지만 난 쓰지않을거야 ,,,, 마이바티스 싫어 ,,, 싫어억!!!!!!!!!
'Back-end Skill > Springboot' 카테고리의 다른 글
[SpringSecurity] 쿼리낭비하지않는 코드: @AuthenticationPrincipal 쓰지않으면서 (0) | 2022.10.24 |
---|---|
[Springboot] 데이터 인자를 넘겨받는 각기 어노테이션 : 목적으로 다르게 효율적으로 쓰일 수 있는 방법들 (0) | 2022.10.24 |
면접 스터디 2주차 자바와 스프링 프레임워크 (0) | 2022.02.15 |
스프링 MVC 정리본 1 (0) | 2022.02.12 |
스프링 세션8_ 빈 생명주기 콜백 (0) | 2022.02.06 |