-
[SPRING/JPA] Generic을 이용해 entity의 repository 찾아보기
기능 개발 중 reflection을 통해서 특정 entity객체를 생성하고 해당 entity의 repository를 찾아서 select를 해야하는 상황이 있었다. 모든 repository는 JpaRepository를 상속받고 있었고, 개별적으로 만든 쿼리는 다행히 없었다. 단순하게 해당 repository의 구현체를 찾으면 되는것이라 JpaRepository 상속 시 입력한 generic을 통해 찾기로 했다. 1. JpaRepository list 받기 JpaRepository 목록을 한 번에 입력 받는건 List로 autowired 해주면 된다. 모든 타입을 받기 위해 와일드카드를 사용했다. @Ser... Read More
-
[SPRING/JPA] Spring Data의 Example 활용하기 (QBE)
Spring data jpa를 사용하면 Example 이라는 객체를 이용해 데이터 조회(find, count, exist)를 할 수 있다. (Query by Example) example과 exampleMatcher라는 전략설정(?)을 이용해 해당 조건에 만족하는 데이터를 조회하는 기능이다. Example Example 정보 Example은 interface로 구현체는 TypedExample가 있다. 사용 할 객체는 제네릭로 설정되어있다. 선언 시 Example.of(객체)로 쉽게 생성이 가능하다. 기본적으로 설정되는 ExampleMatcher가 있지만, 사용자가 원할 경우 직접 생성해서 선언이 가... Read More
-
[SPRING/JPA] ID를 할당해서 save 할 때 왜 select 후에 insert를 할까?
새로운 프로젝트에서 JPA를 이용하기때문에 요즘 열심히 공부해보고 있다. mybatis만 썼던 나에게는 너무나도 헷갈리는 개념;; entity를 만들다보면 ID를 자동으로 생성할 때도 있고 직접 할당 할 때도 있다. 직접 할당 시 save를 할 때 혼란스러웠던 부분을 정리해본다. 혼란스러웠던 점 엔티티에서 ID를 직접 할당해서 사용을 했다. save 메서드를 이용하면서 너무나도 혼란스러웠던 것이 있었다. 새로운 entity를 save하는데 왜 insert 전에 select? id 자동 생성시에는 insert전에 select를 안하는데 직접 할당하면 insert전에 select를 하고있다. 왜? SA... Read More
-
[SPRING/JPA] JPA Repository가 정상적으로 DI 되지 않는 현상
오류 Description: Parameter 0 of constructor in com.my.service.MyService required a bean of type 'com.my.jpa.repository.MyRepository' that could not be found. Action: Consider defining a bean of type 'com.my.jpa.repository.MyRepository' in your configuration. entity 클래스와 repository가 생성했는데도 불구하고 데이터 주입이 되지 않는 현상이 발생했다. //entity 클래스 @Entity @... Read More
-
[SPRING/JPA] @TableGenerator로 ID 할당하기
현재 회사에서 Mybatis로 되어있는 데이터접근을 JPA로 바꾸는 작업을 하고 있다. Mybatis 이용 시 PK를 키 관리하는 테이블을 통해서 생성을 했고, JPA에서도 그 방식을 유지하기로 했다. 알아보니 여러 ID 생성 전략 중 Table은 성능이 딸린다는 단점이 있기는 한데, 현 상황에서는 여러 DBMS에서 공통적으로 쓰기 편하다는 장점이 더 커서 이 방법으로 유지했다. 기존에는 테이블에서 키를 조회하고 업데이트하는 쿼리를 직접 호출해서 PK를 생성했지만 JPA에서는 Entity객체에 어노테이션으로만으로 가능했다. 1. Key 관리 테이블 생성 간단하게 키를 관리할 테이블을 생성한다. (table... Read More