반응형
Querydsl 로 db에서 데이터를 가져오는 로직이 있는데, left join 을 여러번해서 데이터를 가져오다보니 쿼리가 10초 이상 걸려서 db 커넥션 타임아웃이 나는 문제가 발생하여... 이를 개선하는 과정에서 querydsl projection 에서 subquery를 사용하기로 했다. NumberPath bCounts = Expressions.numberPath(Long.class, "bCounts"); QAEntity aEntity = QAEntity.aEntity; QBEntity bEntity = QBEntity.bEntity; // left join 한 table Projections.bean( AEntity.class, aEntity.id, aEntity.name, aEntity.age,..
일반적으로 리스트를 생성하고 사용할 때 new ArrayList() 를 관습적으로 사용한다고 들었고 그렇게 사용했다. 왜 그렇게 사용하는지 궁금해서 찾아봄 Array 는 고정 길이 자료구조이지만 ArrayList 는 가변 길이 자료구조 고정 길이 자료구조를 사용할 때는 Array 가 메모리 측면에서 이득이 있다고 한다. ArrayList는 List 인터페이스의 구현체라서 List 의 메소드를 사용할 수 있음 그렇다면 다른 List 구현체보다 ArrayList 를 사용하는 이유는? 일반적으로 비교되는게 LinkedList 인데 LinkedList 는 doubly linked List 이기 때문에 삽입, 삭제가 빠르다 대신 읽는 속도는 ArrayList 보다 느림 ArrayList : O(1) LinkedL..
query dsl을 쓰지 않고 @Query 문으로 특정 값을 업데이트 하는 기능을 작성할 필요가 있었는데 해당 데이터의 status 를 ACTIVE -> DELETED 로 변경하려고 했다. status를 Enum 타입으로 관리를 하고 있었는데 @Query 문을 사용하는 메소드에서 status Enum 값을 전달받아도 되지만, 쿼리문에서 직접 넣어주고 싶어서 적용해보았다. 패키지 내부의 해당 Enum 클래스 경로를 직접 넣어주면 Enum 값을 직접 넣어줄 수 있었다. @Modifying @Query("UPDATE targetTable t SET t.status=com.package.path.EntityStatus.DELETED WHERE ...") void deleteTargetRow();
오늘 작성한 글은 "오늘" 어제 작성한 글은 "어제" 그 이전에 작성한 글은 MM/dd 형식으로 표현해주고 싶었다. 가지고 있는 데이터는 LocalDateTime 이었는데 이를 이용해서 표현해주었다 // 주어진 시간 데이터 LocalDateTime localDateTime // 현재 시간 (서울 기준) LocalDate now = LocalDate.now(ZONE_SEOUL); // 주어진 시간 데이터 서울 기준 변환 LocalDate zonedTime = localDateTime.atZone(ZONE_SEOUL).toLocalDate(); if (now.isEqual(zonedTime)) { return "오늘"; } else if (now.minusDays(1).isEqual(zonedTime)) {..
QueryDsl 로 생성된 Q객체를 import 에서 찾지 못해서 앱을 실행하고 있지 못했다 그냥 계속 찾지 못한다만 나오니.. 이전에도 이런 일이 있어서 IDE 인덱싱에는 바로 나타나지 않았지만 찾으면 나오는 에러들을 가서 찾아서 해결해보았다. 필자같은 경우에는 entity 에서 필드 하나를 바꾸어주었는데 기존 필드 이름을 사용하는 부분이 있어 수정해주었다. 그러니 해결.. 나중에 수정한 부분을 다시 바꿔서 실행해주면 그 부분이 잘못되어 컴파일 하지 못한다고 다시 제대로 알려줌.. 파일이 많아 에러가 인덱싱에서 바로 나타나지 않는 경우 이런 에러가 발생하기도 한다 ㅜㅜ