분류 전체보기

메모장

JPA의 distinct의 두가지 기능

DB에 distinct 키워드를 날려주고 그 후 DB로 부터 데이트를 받은 뒤 Entity에 중복이 있는경우 그 중복을 제거해서 나에게 반환해준다.

메모장

지연로딩과 조회 성능 최적화

보호되어 있는 글입니다.

메모장

DTO는 entity를 참조해도 괜찮음

그리고 repository -> service -> controller이런식으로 한방향으로만 하게 만들자

메모장

fetch join과 @OneToMany에 대한 나의 생각

OneToMany관계를 맺었을 때 N + 1이 일어난다고 했다. 그 이유가 이제서야 이해가 됐다 Article엔티티에 @OneToMany(mappedBy = "commet", fetch = Lazy) List comments 이런식으로 있다고 치자 Article이 comment를 조회하기 위해 for (Comment comment : comments) { comment.getContent(); } 이와 같이 했을 때 지연로딩이기 때문에 각 루프를 돌 때마다 "getContent()"가 프록시에서 진짜 객체로 만들기 위해 데이터 베이스로 조회를 하여 영속 컨텍스트에 넣어놓는다. 한 Article에 만약 comment가 100개다? 그러면 100번의 쿼리가 날라가는 것이다. 그리고 만약 100개의 Artic..

메모장

테스트 데이터 생성 시 유용한 것 @PostContruct

@PostConstruct class Test { @PostContruct public Init() { System.out.println("빈이 등록될 때 해당 메소드를 실행"); } } 를 사용하면 빈이 등록되는 시점에 바로 위의 메서드를 실행한다 테스트데이터를 만들 떄 좋을것같다.

주의점 메모장

엔티티, 리스트를 직접 반환하지말라

이렇게 Entity를 직접 반환도 하지말자 예시를 들어보자 회원목록을 보려고 하는데 Member자체를 호출해버리면 거기에 딸린 orders까지 보인다 즉 정보를 조회하면 그 사람이 주문 한것까지 조회가 된다는것이다. 만약 다른사람이 어느 사람을 조회했는데 저렇게 된다면 별로 좋지 않을것이다. 그렇다고 이렇게 JsonIgnore를 쓰면 orders는 넘어가지 않을것이다. 하지만 또 문제점이 있다. 조회를 하는 함수는 여러개가 있는데 모든 조회함수들은 orders를 호출하지 못하는 문제가 생기며 추가적으로 Entity가 스팩이 변하면 또 문제도 생기는것이다. 그리고 List를 그대로 반환하면 기능 확장이 어렵다. DTO를 넣어서 List도 넣고 다른것도 넣고 해서 유연하고 안전하게 가져가자 이것도 DTO를 ..

키스샷1104
'분류 전체보기' 카테고리의 글 목록 (19 Page)