getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(org.hibernate.Session session) throws HibernateException, SQLException {
Query query = session.getNamedQuery("updateSample");
query.setParameter("firstColumn", firstValue, Hibernate.STRING);
query.setParameter("lastColumn", lastValue, Hibernate.INTEGER);
// query.setParameter("firstColumn", firstValue);
// query.setParameter("lastColumn", lastValue);
query.executeUpdate();
return null;
};
});
==================================================
<'sql-query name="updateSample">
<'![CDATA[
update
SAMPLETABLE
set
FIRSTCOLUMN = :firstColumn
where
LASTCOLUMN = :lastColumn
]]>
<'/sql-query>
==================================================
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
...
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session
.createSQLQuery("UPDATE SAMPLETABLE SET FIRSTCOLUMN='STH', SECONDCOLUMN='NTH' where LASTCOLUMN='8318'");
query.executeUpdate();
return null;
};
});
...
ref:
http://forum.springframework.org/archive/index.php/t-18111.html
|<'hibernate-mapping>
|
| <'sql-query name="selectSample">
| <'return alias="tempname" class="sample.SampleClass"><'/return>
|
| <'![CDATA[
| select * from sampletable
| ]]>
|
| <'/sql-query>
|
|<'/hibernate-mapping>
[alias] An alias generator for SQL identifiers.
Hibernate3(http://www.hibernate.org/)
hibernate3.jar
antlr-2.7.5H3.jar
asm-attrs.jar
asm.jar
cglib-2.1.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.jar
ehcache-1.1.jar
jta.jar
hibernateonrails.jar(http://www.fk.urban.ne.jp/home/kishida/soft/hibernateonrails-preview.zip)
Velocity1.4(http://jakarta.apache.org/velocity/)
velocity-dep-1.4.jar
Javassist3.0(http://www.csg.is.titech.ac.jp/~chiba/javassist/)
javassist.jar
ref:
http://www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html
複数のテーブルからデータを取得する場合のパフォーマンス対策として利用されるテーブル結合。
Hibernateでは、マッピング・ファイルでのJOINの設定や、HQLのfrom句でのJOIN指定により、結合を行うのが一般的。
ただし、これでは、Hibernateは永続オブジェクトの関連をたどって結合を行うため、関連のないオブジェクト間の結合は不可。
解決策は2つ。
1
HQLのwhere句に結合条件を記述する方法。
例えば、関連のない2つのテーブル(TABLE_A、TABLE_B)と、それに対応した永続クラス(EntityA、EntityB)がある。ここで、テーブルTABLE_AのフィールドID_AとテーブルTABLE_B のフィールドID_Bとの間で結合を行うものとして、それに対応するクラスEntityAのプロパティがidA、クラスEntityBのプロパティが idBだとする。その場合、結合を行うためのHQL文は、以下のようになる。
from EntityA a, EntityB b where a.idA = b.idB
2
ネイティブSQLクエリを用いて、結合を行うためのSELECT文を直接記述するという方法。
例えば、上記の例において結合を行うためのSELECT文は、以下のようになる(以下は、RDBMSにMySQLを用いる場合)。
SELECT * FROM TABLE_A TA, TABLE_B TB WHERE TA.ID_A = TB.ID_B
また、ネイティブSQLクエリを用いると、HQLでは使えないfrom句でのJOIN指定も利用できる(以下参照)。
SELECT * FROM TABLE_A TA JOIN TABLE_B TB ON TA.ID_A = TB.ID_B
いずれの場合も、戻り値となるListオブジェクトには、オブジェクト型の配列(Object[])が格納される。上記の場合であれば、EntityAとEntityBの両オブジェクトが格納された配列が検索結果の行数分だけ返される。
ref:
http://www.itarchitect.jp/enterprise/-/49469-4.html
public class SampleDaoImpl extends HibernateDaoSupport {
public void create(Hoge hoge) {
getHibernateTemplate().save(hoge);
}
public void update(Hoge hoge){
getHibernateTemplate().update(hoge);
}
public Hoge findById(int id){
return (Hoge)getHibernateTemplate().load(Hoge.class, id);
}
public void delete(Hoge hoge){
getHibernateTemplate().delete(hoge);
}
public List findByName (String name){
return getHibernateTemplate().find("from Hoge hoge where hoge.name like ?", name + "%");
}
}
<'?xml version="1.0" encoding="UTF-8"?>
<'beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<'!-- service definition -->
<'bean id="sampleService" class="service.SampleServiceImpl">
<'property name="sampleDao">
<'ref local="sampleDaoImpl"/>
<'/property>
<'/bean>
<'bean id="sampleDaoImpl" class="dao.SampleDaoImpl">
<'property name="sessionFactory">
<'ref local="sessionFactory"/>
<'/property>
<'/bean>
<'!-- LocalDataSource HSQL -->
<'bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<'property name="driverClassName">
<'value>com.microsoft.sqlserver.jdbc.SQLServerDriver<'/value>
<'/property>
<'property name="url">
<'value>jdbc:postgresql://localhost:5432;sampleapp<'/value>
<'/property>
<'property name="username"><'value>un<'/value><'/property>
<'property name="password"><'value>pw<'/value><'/property>
<'/bean>
<'bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<'property name="dataSource">
<'ref local="dataSource"/>
<'/property>
<'property name="mappingResources">
<'list>
<'value>bean/sampleBean.hbm.xml<'/value>
<'/list>
<'/property>
<'property name="hibernateProperties">
<'props>
<'prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect<'/prop>
<'prop key="hibernate.show_sql">true<'/prop>
<'prop key="hibernate.use_outer_join">true<'/prop>
<'/props>
<'/property>
<'/bean>
<'!-- transactionManager -->
<'bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<'property name="sessionFactory" ref="sessionFactory"/>
<'/bean>
<'bean id="dao" class="dao.SampleDaoImple">
<'property name="sessionFactory" ref="sessionFactory"/>
<'/bean>
<'bean id="service"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<'property name="transactionManager" ref="transactionManager"/>
<'property name="target" ref="serviceTarget"/>
<'property name="transactionAttributes">
<'props>
<'prop key="query*">PROPAGATION_REQUIRED, readOnly<'/prop>
<'/props>
<'/property>
<'/bean>
<'bean id="serviceTarget" class="service.SampleServiceImpl">
<'property name="dao" ref="dao"/>
<'/bean>
<'/beans>