요즘 Hibernate가 필요해서 이것저것 해 보고 있다.
특히 장점은 한 번 프로그램을 작성해 놓으면 설정만으로 다른 종류의 DBMS에서도 그대로 사용이 가능하다는 거다. 그래서, 열심히 기존에 있던 오라클용 SQL을 HQL로 변경해서 테스트해 보는데 이거 제약이 좀 있다.
참고로, HQL 테스트환경은 Hibernate Tools를 Eclipse에 설치해서 Configuration 잡아 주고, Hibernate perspective에서 Hibernate Configurations 탭을 통해 HQL Editor를 띄우면 일반 DB client처럼 쿼리 결과도 볼 수 있고, HQL로부터 실제로 생성되는 SQL도 볼 수 있다.
일단, 인터넷에서 HQL에서 UNION이 지원되나 찾아 보면 안 된다는 내용이 대세다.
하지만, 내가 오라클을 써서 그런지 내가 쓰는 Hibernate 버전에서 지원되는 건지 모르겠지만 UNION만은 잘 된다. 3개를 묶어도 잘 된다. 그런데, UNION을 IN의 subquery에서 사용하면 못 한다고 에러가 난다.
[code sql]
from t1
where col1 in (
select col2 as name1
from t2
where col3 = 'a'
union
select col2 as name1
from t3
where col3 = 'a'
)
[/code]
처음엔 에러 메시지가 union 부분이라고 해서 union을 못 쓰는 줄 알았는데, 하다보니 in 안의 subquery에서 사용해서 그런 거였다. 결국 그래서 아래와 같이 바꿨다.
[code sql]
from t1
where col1 in (
select col2 as name1
from t2
where col3 = 'a'
)
union
from t1
where col1 in (
select col2 as name1
from t3
where col3 = 'a'
)
[/code]
덕분에 쿼리가 왕창 길어졌다. ㅡ.ㅡ;
이렇게 쿼리 만드는 일이 거의 없나? 하긴 나는 원래 그냥 UNION도 거의 안 써 봤으니...
암튼 잘 되기만 하면 된다.
2009년 8월 21일 금요일
2009년 8월 20일 목요일
Flex + BlazeDS + Java 웹프로젝트용 Ant Build.xml
Eclipse + Flex Builder로 개발한 웹애플리케이션을 WAR로 export하면 Flex 소스코드까지 그대로 묶여서 들어간다.
그래서, Flex나 Java 코드는 다시 compile하지 않고 웹애플리케이션으로 deploy할 때 꼭 필요한 컴파일된 파일들과 리소스 파일들을 별도의 디렉토리에 복사해 WAR로 묶은 다음 지정된 위치로 복사해 주는 기능이다.
사실 그냥 WAR로 묶어도 별 문제는 없을 것 같지만 혹시나 소스가 공개될 수도 있고, Flex 소스가 다 들어가면 WAR 파일이 너무 커져서 만들어 봤다.
그래서, Flex나 Java 코드는 다시 compile하지 않고 웹애플리케이션으로 deploy할 때 꼭 필요한 컴파일된 파일들과 리소스 파일들을 별도의 디렉토리에 복사해 WAR로 묶은 다음 지정된 위치로 복사해 주는 기능이다.
사실 그냥 WAR로 묶어도 별 문제는 없을 것 같지만 혹시나 소스가 공개될 수도 있고, Flex 소스가 다 들어가면 WAR 파일이 너무 커져서 만들어 봤다.
<!-- 현재 프로젝트의 컴파일된 코드를 WAR로 묶어 webapp.dir 속성에 지정된 디렉토리에 복사 . 추가로 컴파일은 하지 않음 --> <project name="MyWebApp" basedir="." default="deploy"> <!-- Directory to deploy the generated WAR file --> <property name="webapp.dir" value="C:/apache-tomcat-5.5.26/webapps" /> <property name="web.app.name" value="FLEXAPP" /> <property name="package.name" value="${web.app.name}.war" /> <property name="dest.dir" value="target" /> <property name="flex.file.dir" value="bin-debug"/> <property name="web.content.dir" value="WebContent"/> <target name="prepare"> <mkdir dir="${dest.dir}" /> </target> <target name="package" depends="prepare"> <echo>Packaging...</echo> <!-- copy Flex and Java Web files --> <copy todir="${dest.dir}" overwrite="false"> <fileset dir="${flex.file.dir}"/> <fileset dir="${web.content.dir}"/> </copy> <!-- package war file --> <war destfile="${dest.dir}/${package.name}" webxml="${dest.dir}/WEB-INF/web.xml" basedir="${dest.dir}"/> </target> <!-- deploy the generated war file --> <target name="deploy" depends="package"> <echo>Deploying...</echo> <copy file="${dest.dir}/${package.name}" tofile="${webapp.dir}/${package.name}" overwrite="true" /> <delete file="${dest.dir}/${package.name}" /> </target> </project> |
피드 구독하기:
글 (Atom)