Hibernate - Composite-id 사용시 쿼리 구문에서 변수 접근 방법
Posted 04 28, 2009 00:03, Filed under: Language/ㅡ Hibernate
# 한번의 광고 클릭으로, 당신을 대신해서 불우이웃을 도울 기회가 많아집니다.
참고자료 :
http://cafe.naver.com/deve.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=947
내가 해결한 방식 :
composite-id 를 이용한경우 해당 변수에 접근하기위해 . 을 이용한다.
예) useSeqType.useSeq
hbm.xml 에 정의된 테이블 정보
<class name="kr.or.copyright.freeuse.domain.donation.DonationUseUser" table="donation_use_user">
<comment>정보</comment>
<composite-id name="useSeqType" class="kr.or.copyright.freeuse.domain.donation.DonationUseCsUseSeqAtUserType">
<key-property name="useSeq" column="use_seq" type="integer" />
<key-property name="userType" column="user_type" type="integer" />
</composite-id>
<property name="userName" column="user_name" type="string" />
<property name="userNationality" column="user_nationality" type="string" />
<property name="userJumin" column="user_jumin" type="string" />
<property name="userTel" column="user_tel" type="string" />
<property name="userEmail" column="user_email" type="string" />
<property name="userZip" column="user_zip" type="string" />
<property name="userAddr1" column="user_addr1" type="string" />
<property name="userAddr2" column="user_addr2" type="string" />
<property name="createId" column="create_id" type="string" />
<property name="createDate" column="create_date" type="timestamp" />
</class>
protected String selectDonationRegManageQuery(String searchType, String key, String keyword, int currentPage, int countPerPage, boolean isTotal){
String andQuery = "";
StringBuffer sb = new StringBuffer();
if(searchType.equals("donation")){
if(key.equals("TITLE")){ // 제목검색
andQuery = " AND a.donationTitle LIKE '%"+keyword+"%'";
}else if(key.equals("DONATOR")){ // 검색
andQuery = " AND c.userName LIKE '%"+keyword+"%'";
}
logger.debug("selectDonationRegManageQuery - 1");
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
logger.debug("selectDonationRegManageQuery - 2");
}else{
logger.debug("selectDonationRegManageQuery - 3");
sb.append("SELECT a.donationTitle ");
sb.append(" , b.userName ");
sb.append(" , (SELECT branchName FROM WritingBranch WHERE branchSeq = a.branchL)AS branchName ");
sb.append(" , a.createDate ");
sb.append(" , a.contents ");
}
logger.debug("selectDonationRegManageQuery - 4");
sb.append(" FROM DonationRegWriting a, DonationReg b, CommonCode c ");
sb.append(" WHERE a.donationWritingSeq = b.donationRegSeq ");
sb.append(" AND a.donationStatus = c.statusCode ");
sb.append(" AND c.workCode = '02' ");
sb.append(" AND c.statusCode = '07' ");
sb.append(andQuery);
}else if(searchType.equals("use")){
if(key.equals("DONATOR")){
andQuery = " AND d.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND d.createDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT c.donationWritingSeq ");
sb.append(" , c.donationTitle ");
sb.append(" , d.userName ");
sb.append(" , b.userName ");
sb.append(" , a.useReason ");
sb.append(" , e.createDate ");
}
sb.append(" FROM DonationUseApp a, DonationUseUser b ");
sb.append(" , DonationRegWriting c, DonationReg d ");
sb.append(" , DonationPermission e ");
sb.append(" WHERE a.userId = e.userId ");
sb.append(" AND a.useSeq = b.useSeqType.useSeq ");
sb.append(" AND a.useSeq = e.useSeq ");
sb.append(" AND a.donationSeq = e.donationNo ");
sb.append(" AND a.donationSeq = c.donationWritingSeq ");
sb.append(" AND c.donationWritingSeq = d.donationRegSeq");
sb.append(andQuery);
}else if(searchType.equals("donPrint")){
if(key.equals("DONATOR")){
andQuery = " AND b.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND c.printDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT c.printDate ");
sb.append(" , a.donationTitle ");
sb.append(" , b.userName ");
sb.append(" , c.donationCode ");
sb.append(" , a.createDate ");
sb.append(" , c.userId ");
}
sb.append(" FROM DonationRegWriting a, DonationReg b ");
sb.append(" , DonationPrint c ");
sb.append(" WHERE a.userId = c.userId ");
sb.append(" AND a.donationRegSeq = b.donationRegSeq");
sb.append(" AND a.donationWritingSeq = c.donationSeq");
sb.append(andQuery);
}else if(searchType.equals("usePrint")){
if(key.equals("USER_NAME")){
andQuery = " AND d.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND c.printDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT a.donationWritingSeq ");
sb.append(" , c.printDate ");
sb.append(" , a.donationTitle ");
sb.append(" , d.userName ");
sb.append(" , e.useReason ");
sb.append(" , c.donationCode ");
sb.append(" , f.createDate ");
sb.append(" , c.userId ");
}
sb.append(" FROM DonationRegWriting a, DonationReg b ");
sb.append(" , DonationPrint c, DonationUseUser d ");
sb.append(" , DonationUseApp e, DonationPermission f ");
sb.append(" WHERE a.userId = c.userId ");
sb.append(" AND a.donationRegSeq = b.donationRegSeq ");
sb.append(" AND a.donationWritingSeq = c.donationSeq ");
sb.append(" AND d.useSeqType.useSeq = e.useSeq ");
sb.append(" AND e.useSeq = f.useSeq ");
sb.append(" AND a.donationWritingSeq = e.donationSeq ");
sb.append(" AND a.donationWritingSeq = f.donationNo");
sb.append(andQuery);
}
logger.debug("### selectDonationRegManageQuery : " + sb.toString());
return sb.toString();
}
http://cafe.naver.com/deve.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=947
내가 해결한 방식 :
composite-id 를 이용한경우 해당 변수에 접근하기위해 . 을 이용한다.
예) useSeqType.useSeq
hbm.xml 에 정의된 테이블 정보
<class name="kr.or.copyright.freeuse.domain.donation.DonationUseUser" table="donation_use_user">
<comment>정보</comment>
<composite-id name="useSeqType" class="kr.or.copyright.freeuse.domain.donation.DonationUseCsUseSeqAtUserType">
<key-property name="useSeq" column="use_seq" type="integer" />
<key-property name="userType" column="user_type" type="integer" />
</composite-id>
<property name="userName" column="user_name" type="string" />
<property name="userNationality" column="user_nationality" type="string" />
<property name="userJumin" column="user_jumin" type="string" />
<property name="userTel" column="user_tel" type="string" />
<property name="userEmail" column="user_email" type="string" />
<property name="userZip" column="user_zip" type="string" />
<property name="userAddr1" column="user_addr1" type="string" />
<property name="userAddr2" column="user_addr2" type="string" />
<property name="createId" column="create_id" type="string" />
<property name="createDate" column="create_date" type="timestamp" />
</class>
protected String selectDonationRegManageQuery(String searchType, String key, String keyword, int currentPage, int countPerPage, boolean isTotal){
String andQuery = "";
StringBuffer sb = new StringBuffer();
if(searchType.equals("donation")){
if(key.equals("TITLE")){ // 제목검색
andQuery = " AND a.donationTitle LIKE '%"+keyword+"%'";
}else if(key.equals("DONATOR")){ // 검색
andQuery = " AND c.userName LIKE '%"+keyword+"%'";
}
logger.debug("selectDonationRegManageQuery - 1");
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
logger.debug("selectDonationRegManageQuery - 2");
}else{
logger.debug("selectDonationRegManageQuery - 3");
sb.append("SELECT a.donationTitle ");
sb.append(" , b.userName ");
sb.append(" , (SELECT branchName FROM WritingBranch WHERE branchSeq = a.branchL)AS branchName ");
sb.append(" , a.createDate ");
sb.append(" , a.contents ");
}
logger.debug("selectDonationRegManageQuery - 4");
sb.append(" FROM DonationRegWriting a, DonationReg b, CommonCode c ");
sb.append(" WHERE a.donationWritingSeq = b.donationRegSeq ");
sb.append(" AND a.donationStatus = c.statusCode ");
sb.append(" AND c.workCode = '02' ");
sb.append(" AND c.statusCode = '07' ");
sb.append(andQuery);
}else if(searchType.equals("use")){
if(key.equals("DONATOR")){
andQuery = " AND d.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND d.createDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT c.donationWritingSeq ");
sb.append(" , c.donationTitle ");
sb.append(" , d.userName ");
sb.append(" , b.userName ");
sb.append(" , a.useReason ");
sb.append(" , e.createDate ");
}
sb.append(" FROM DonationUseApp a, DonationUseUser b ");
sb.append(" , DonationRegWriting c, DonationReg d ");
sb.append(" , DonationPermission e ");
sb.append(" WHERE a.userId = e.userId ");
sb.append(" AND a.useSeq = b.useSeqType.useSeq ");
sb.append(" AND a.useSeq = e.useSeq ");
sb.append(" AND a.donationSeq = e.donationNo ");
sb.append(" AND a.donationSeq = c.donationWritingSeq ");
sb.append(" AND c.donationWritingSeq = d.donationRegSeq");
sb.append(andQuery);
}else if(searchType.equals("donPrint")){
if(key.equals("DONATOR")){
andQuery = " AND b.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND c.printDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT c.printDate ");
sb.append(" , a.donationTitle ");
sb.append(" , b.userName ");
sb.append(" , c.donationCode ");
sb.append(" , a.createDate ");
sb.append(" , c.userId ");
}
sb.append(" FROM DonationRegWriting a, DonationReg b ");
sb.append(" , DonationPrint c ");
sb.append(" WHERE a.userId = c.userId ");
sb.append(" AND a.donationRegSeq = b.donationRegSeq");
sb.append(" AND a.donationWritingSeq = c.donationSeq");
sb.append(andQuery);
}else if(searchType.equals("usePrint")){
if(key.equals("USER_NAME")){
andQuery = " AND d.userName LIKE '%"+keyword+"%'";
}else if(key.equals("ISSUE_DATE")){
andQuery = " AND c.printDate LIKE '%"+keyword+"%'";
}
if(isTotal == true)
{
sb.append("SELECT COUNT(*)AS CNT ");
}else{
sb.append("SELECT a.donationWritingSeq ");
sb.append(" , c.printDate ");
sb.append(" , a.donationTitle ");
sb.append(" , d.userName ");
sb.append(" , e.useReason ");
sb.append(" , c.donationCode ");
sb.append(" , f.createDate ");
sb.append(" , c.userId ");
}
sb.append(" FROM DonationRegWriting a, DonationReg b ");
sb.append(" , DonationPrint c, DonationUseUser d ");
sb.append(" , DonationUseApp e, DonationPermission f ");
sb.append(" WHERE a.userId = c.userId ");
sb.append(" AND a.donationRegSeq = b.donationRegSeq ");
sb.append(" AND a.donationWritingSeq = c.donationSeq ");
sb.append(" AND d.useSeqType.useSeq = e.useSeq ");
sb.append(" AND e.useSeq = f.useSeq ");
sb.append(" AND a.donationWritingSeq = e.donationSeq ");
sb.append(" AND a.donationWritingSeq = f.donationNo");
sb.append(andQuery);
}
logger.debug("### selectDonationRegManageQuery : " + sb.toString());
return sb.toString();
}
"Language / ㅡ Hibernate" 분류의 다른 글
| 7 - HQL과 Criteria를 이용한 조회 (0) | 2009/05/14 |
| 6 - 콜렉션과 many-to-many 매핑 처리 (0) | 2009/05/14 |
| 5 - 객체 다루기(생명주기, CRUD, 객체로딩전략, 영속성전이) (0) | 2009/05/14 |
| 4 - 객체-테이블 매핑 설정 파일 작성 (2) (0) | 2009/05/14 |
| 4 - 객체-테이블 매핑 설정 파일 작성 (1) (0) | 2009/05/14 |
| 3 - 퍼시스턴트 클래스(Persistent Class) 작성 (0) | 2009/05/14 |
| 2- 세션(커넥션) 및 트랜잭션 프로퍼티 설정 (0) | 2009/05/14 |
| 1- Hibernate - 퀵 스타트 (0) | 2009/05/14 |
| Hibernate - hql 사용 sort 및 조인 (0) | 2009/04/13 |
| 초보자를 위한 Hibernate 사용 Tips(2) (2) | 2009/03/21 |
# 한번의 광고 클릭으로, 당신을 대신해서 불우이웃을 도울 기회가 많아집니다.
Response :
0 Trackback
,
0 Comment
Trackback URL : http://develop.sunshiny.co.kr/trackback/205