2006-02-22
■[hibernate] hibernate2 から hibernate3 の変更点 ネイティブSQL編
hibernate でネイティブSQLを発行したい場合 Session クラスの createSQLQuery を使用する。
hibernate2 の場合は下記の通りだった。
net.sf.hibernate.Session
public Query createSQLQuery(String sql, String returnAlias, Class returnClass);
public Query createSQLQuery(String sql, String[] returnAliases, Class[] returnClasses);
これが hibernate3 になって createSQLQuery の引数と戻り値が変更された。
org.hibernate.Session
public SQLQuery createSQLQuery(String queryString) throws HibernateException;
hibernate2 の createSQLQuery の引数は、新設された SQLQuery クラスを使用する方法へと変更になった。
org.hibernate.SQLQuery
public SQLQuery addEntity(String entityName);
public SQLQuery addEntity(String alias, String entityName);
public SQLQuery addEntity(String alias, String entityName, LockMode lockMode);
public SQLQuery addEntity(Class entityClass);
public SQLQuery addEntity(String alias, Class entityClass);
public SQLQuery addEntity(String alias, Class entityClass, LockMode lockMode);
使用方法の例としては以下のようになる。
hibernate2
Query query = getSession().createSQLQuery(sql, "abc", Abc.class);
hibernate3
SQLQuery query = getSession().createSQLQuery(sql);
query.addEntity("abc", Abc.class);
2006-02-18
■[servlet] トラックバックの受信処理で文字化け
現象
request の setCharacterEncoding を設定しているのに文字化けしてしまう。
原因
setCharacterEncoding より前に getParameter を行っていた為に文字エンコーディングが確定してしまい、設定した文字エンコーディングが意味を成していなかった。
対応
トラックバックの(過渡期の)仕様として charset パラメータにて文字エンコーディングを指定するというものがあるが、Servlet 的には getParameter (正確には getReader)を呼んだ時点でエンコーディングが確定してしまう。手動でエンコーディングするしかないか。
2006-02-17
■[commons-validator][struts] Struts 1.2.8で使用されているCommons Validator 1.1.4のバグ
現象
Struts 1.2.8のURLバリデーションで正しいURLがエラーになってしまう。
原因
Struts 1.2.8で使用されているCommons Validator 1.1.4のURLバリデータ(正確には UrlValidator クラス)のバグ。
対応
UrlValidator だけ Commons Validator 1.2 のクラスと置き換えることで対応
validatorのソースを読んでやっと問題が分かりました。もっと早くググっとけば・・・