[Seasar-user:1825] Re: S2Hibernate で QBE ( Query by Example )

Koichi Kobayashi koichik
2005年 4月 16日 (土) 01:31:26 JST


小林 (koichik) です.

On Wed, 13 Apr 2005 13:49:14 +0900 (JST)
佐藤 亘 <[E-MAIL ADDRESS DELETED]> wrote:

> ↓のように、 S2Hibernateのサンプルを利用してQBE(Query by Example)をやってみました。
中略
> empnoに設定してつもりが(setEmpno()、コンソールのログを見てみると、
> 
> Hibernate: select this.EMPNO as EMPNO0_, this.ENAME as ENAME0_, this.JOB as JOB0_, this.MGR as MGR0_, this.HIREDATE as HIREDATE0_, this.SAL as SAL0_, this.COMM as COMM0_, this.DEPTNO as DEPTNO0_ from EMP this where (this.DEPTNO=?)
> 
> と、(this.DEPTNO=?)の指定されてました。これは設定方法とかが悪かったのでしょうか?

まず,佐藤さんが「やりたいこと」を明確にしましょう.
「こんな条件を指定したい」とか「こんな結果を取得したい」とか.

Example は create(Object) の引数として渡したオブジェクトと
同じ値のプロパティ (カラム) を持ったオブジェクトを検索します.
同じ名前を持ったオブジェクトとか,同じ部門のオブジェクトなど.
ただし,主キーは常にユニークですから,判定には使われません.
また,null に設定されているプロパティも判定には使われません.

佐藤さんが create(Object) で渡した Employee は empno のみ
設定されていますが,empno は Employee の主キーです.
よって,この問い合わせ条件には empno は含まれません.
そして deptno はプリミティブ型の int で null にならないため,
無条件に検索条件に含まれます.

もし主キーを指定して問い合わせをしたいのであれば
Example を使う必要はなく,session#get(Object) などを
使えばよいと思います.

もし Example を試したいだけであれば,主キー以外の項目に
値を設定してください.
deptno を問い合わせ条件から外したいのであれば,Employee の
deptno を Integer にしてください.

なお,これらは S2Hibernate の話というより Hibernate 本体の話です.
この ML で回答が得られるとは限らないことにご注意ください.


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内