Querydsl의. orderBy() 메서드를 살펴보면 OrderSpecifier 매개변수로 받는다. 아주 간편하게 정렬을 하는 방법을 기록해 본다. private OrderSpecifier pageableToOrderSpecifier(Pageable pageable) { Sort.Order sortOrder = pageable.getSort().get().collect(Collectors.toList()).get(0); Order order = sortOrder.getDirection().isAscending() ? Order.ASC : Order.DESC; PathBuilder sort = new PathBuilder(WorldCup.class, "worldCup").get(sortOrder.getP..
이상형월드컵 게임을 위해 랜덤 정렬이 필요했다. 그래서 querydsl에서 사용해 보려고 관련 자료들을 찾아보았다. .orderBy(NumberExpression.random().asc()) 해당 방법을 사용하면 SQLSyntaxErrorException이 발생하며, MySql 버전이 맞지 않는다고 한다. 그래서 우선은 @Query 어노테이션을 이용해서 직접 작성해 주었다. @Query("SELECT c FROM Candidate c WHERE c.worldCup.id = :worldCupId ORDER BY RAND() LIMIT :teamCount") 해당 방법으로 해서 개발을 진행하다 문득 querydsl에도 방법이 있지 않을까 싶어 좀 더 찾아보니 방법이 있었다. .orderBy(Expressio..
JPA를 이용해 간편하게 메서드 네이밍을 사용하던 중 문제가 발생했다 A and (B or C)를 찾는 메서드를 만들어야 하는데 어렵다... 사실 그냥 쿼리를 만들면 쉽긴 하다만JPA메서드네이밍만으로 할 수 있을 것 같아서 도전해 봤다 Page findAllByProductCategories_Category_CategoryIdAndNameContainsOrProductCategories_Category_CategoryIdAndBrandContains(long categoryId1, String name, long categoryId2, String brand, Pageable pageable); ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 만들고 보니 어이가 없다 ㅋㅋㅋ 그래도 약간의 ..
로컬 개발환경과 서버 환경을 따로 Profile을 설정해보자 프로젝트 폴더 내의 src/main/resources 에 보면 application.properties 라는 파일에서 Profile을 설정하는데 본인은 .yml 형식을 선호하므로 application.yml 형식으로 바꾸어 주었다. (뭐로 사용하든 관계없음) 사진과 같이 복사해서 2개의 파일을 더 만들어 준다. local 이라고 되어있는 파일에는 로컬 개발환경의 profile을 설정해주고 # 예시) 로컬 환경에서 사용하는 정보들은 application-local.yml 파일에 설정 spring: h2: console: enabled: true path: /h2 datasource: url: jdbc:h2:mem:test jpa: hibernat..
연관 관계 매핑은 참조하는 방향성을 기준으로 단방향과 양방향으로 구분할 수 있다 그리고 엔티티 간에 참조할 수 있는 객체의 수에 따라서 일대다(1:N), 다대일(N:1), 다대다(N:N), 일대일(1:1)로 나눌 수 있다 단방향 연관 관계 한쪽에서만 참조할 수 있는 경우 Member 클래스가 Order 객체를 원소로 포함하고 있으므로, Order를 참조할 수 있다 하지만 Order 클래스는 Member 클래스에 대한 참조 값이 없으므로 Order 입장에서는 Member의 정보를 알 수 없음 양방향 연관 관계 서로 참조할 수 있는 경우 Member 클래스는 Order 객체들을 원소로 포함하고 있고 Order 클래스도 Member 객체를 가지고 있으므로 서로 참조할 수 있다 일대다 (1:N) 일(1)에 해당..
@Entity 클래스 레벨에 @Entity 애너테이션을 붙이면 JPA 관리 대상 엔티티가 된다 -> 데이터베이스의 테이블이 된다는 뜻 애트리뷰트 name 엔티티 이름을 설정할 수 있음 name 애트리뷰트를 설정하지 않으면 기본값으로 클래스 이름을 엔티티 이름으로 사용한다 import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity(name = "USERS") // 엔티티명을 USERS로 설정 @Table(name = "USERS") // 테이블명을 USERS로 설정 public class Member { @Id private Long memberId; } @Table 테이블의 이름을 ..
JPA란 ? Java 진영에서 사용하는 ORM 기술의 표준 사양 - Java의 인터페이스로 사양이 정의되어 있음 Java Persistence API의 약자이지만 현재는 Jakarta Persistence라고도 불림 Hibernate ORM JPA 표준 사양을 구현한 구현체 (이 외에도 EclipseLink, DataNucleus 등이 있음) 데이터 액세스 계층에서의 JPA 위치 데이터 액세스 계층의 상단에 위치함 데이터 저장, 조회 등의 작업은 JPA를 거쳐 JPA의 구현체인 Hibernate ORM을 통해서 이루어지며 Hibernate ORM은 내부적으로 JDBC API를 이용해서 데이터베이스에 접근한다 영속성 컨텍스트 (Persistence Context) JPA의 P에해당하는 Persistence..