둘러보기 생략.
 

안녕하세요. anyframe GenericService 관련 질문입니다.

안녕하세요.
봄은 봄이지만 추운 봄에 고생이 많으십니다.
현재 GenericServiceImpl 을..
일반 CRUD시에 GenericServiceImpl 이런식으로 사용사고 있습니다.

DB에 PK 값이 String으로 넘거가기에 하나일때는 사용하는데 무리가 없는데요.
DB에 PK 값이 두개일 경우에 어떻게 사용해야하는지 궁금해서 문의드립니다.

좋은하루되세요.

Re] 안녕하세요. anyframe GenericService 관련 질문입니다.

특정 테이블이 복합키를 가지고 있는 경우 이에 매핑되는 도메인 클래스 내에 Primary Key를 위한 클래스를 정의하셔서 사용하실 수 있습니다.

테이블 'TABLE_USER'는 GROUP_ID와 USER_ID를 Primary Key로 가지고 있으며 이 테이블과 매핑되는 클래스는 'User'라고 가정해 보겠습니다. 이와 같은 경우 User 클래스는 다음과 같이 정의될 수 있습니다.

public class User implements Serializable {
    private UserKey userKey;
    private String password;
    private String address;
    // getter, setter ...
}

public class UserKey implements Serializable {
    private String groupId;
    private String userId;
    // getter, setter ...
}

또한 GenericServiceImpl 클래스를 상속받은 비즈니스 서비스는 다음과 같이 정의될 수 있습니다. (필요시 GenericServiceImpl 클래스를 통해 제공되는 메소드를 오버라이드할 수 있습니다.)

public class UserServiceImpl extends GenericServiceImpl implements UserService {
    // ....
}

Persistence Layer 처리를 위해 QueryService를 활용하시는 경우 User 클래스와 같이 도메인 클래스가 특정 User defined Object를 포함하고 있다면 QueryService에서 해당 도메인 객체 내에 포함된 내부 객체의 값을 읽고 셋팅할 수 있도록 하기 위해 다음과 같이 정의되어야 합니다.

1. INSERT/UPDATE/DELETE 경우
<query id="...">
<statement>
insert .... into (GROUP_ID, USER_ID, ...)
values (:vo.userKey.groupId, :vo.userKey.userId, ...)
</statement>
...
</query>

2. SELECT 경우
<query id="...">
<statement>
select ...
from USER
where ...
</statement>
<result class="...User">
<result-mapping attribute="{userKey.groupId,userKey.userId}" column="{GROUP_ID, USER_ID}"/>
</result>

안녕하세요.

답변해주신데로 적용하였습니다.
좋은 답변 감사합니다.
좋은 하루 되세요.