Page History
...
Expand | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Address2는 Address데이터에서, 데이터만 약간 변형이 되었습니다. 순차적으로 기술되었기때문에 이해하는데 어려움은 없을듯 보입니다.
|
순수 프로필정보를 가지고 중복체크 여부를 확인하기위한 샘플이며
...
이것은, 짝수번째(3의배수가 짝수번째가되는상황제외)에서 복제를 하였기때문에 중복을 제거한 합이기 때문입니다.
그럼 UNION수행이 JPA에서는 어떻게 작동되는지 확인해보겠습니다.
JPA에서 UNION 사용하기
아쉽게도 JPQL에서 UNION쿼리를 지원하지 않으며, 유니온된 결과는 기존 Entity와 다르기 때문에,결과 역시Entity에 정의하지 않은
새로운 튜플이기 때문에, 맵핑이 불가능한것은 아니나 어려움이 있습니다. 이때는 SQL Native 쿼리 방식을 사용해야하며
만족스럽지는 못하지만 오브젝트를 못하지만 맵핑에도 어려움이 있어서오브젝트를 변환하는 전통적인 방법을 그대로 사용해해보겠습니다.
JPA에서 UNION 사용하기
Code Block | ||||
---|---|---|---|---|
| ||||
public interface AddressRepo2 extends CrudRepository<Address2, Long>{ @Query(value="SELECT address,age,name,phoneNbr,sex FROM db_example.address " + "UNION " + "SELECT address,age,name,phoneNbr,sex FROM db_example.address2 ", nativeQuery = true) List<?> makeUniOn(); //이 함수를 통해, UNION의 결과를 볼수가 있습니다. } List<?> addressUnion = addressRepo2.makeUniOn(); ObjectMapper mapper = new ObjectMapper(); addressUnion.forEach( item ->{ try { String jsonInString = mapper.writeValueAsString(item); System.out.println(jsonInString); }catch(Exception e) { } }); |
결과:
사용방식에 만족스럽진 못하지만, 동일한 기능을, JPA Repository 인터페이스를 통해 활용하여 수행하였습니다.
교집합 구하기
Code Block | ||||
---|---|---|---|---|
| ||||
SELECT address,age,name,phoneNbr,sex FROM db_example.address INTERSECT SELECT address,age,name,phoneNbr,sex FROM db_example.address2; |
...