[Seasar-user:5793] Re: [KuinaDao]Kuinaと複合と主キーと私

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 1月 21日 (日) 03:00:08 JST


小林 (koichik) です.

Date:    Sat, 20 Jan 2007 18:05:12 +0900
From:    "T.N" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:5792] [KuinaDao]Kuinaと複合と主キーと私

>  KuinaDaoで複合主キーを持つテーブルを使おうとして
> 不具合?が発生しましたので報告させていただきます。

ありがとうございます.
これまで Kuina-Dao で複合主キーのテストは
ちゃんとテストしたことがないと思います.

> @Entity
> public class MtType {
> 
>     @Id
>     @GeneratedValue
>     private long id;
> 
>     @Id
>     @GeneratedValue
>     private String type;
> 
>     private String detail;
> (以下略)
> }

Dolteng も複合主キーのことはほとんど考慮していないので
漏れていますが,この場合はクラスに @IdClass アノテーションが
必要です.それがないために Hibernate に type フィールドが
無視されているように見えます.
MyTypeId のようなクラスを作成して,それを @IdClass で
指定すれば,とりあえず

> public List<MtType> findByProperties(MtType mtType);

このメソッドは動くような気がします(確認してませんが).

>  middlegenで生成したPKクラスを持つentityでも同様になりました。

現在のところ,埋め込みオブジェクトはサポートできてないので,
@EmbeddedId を使った場合はうまく動かないと思います.

>  現在はDBは複合主キー、entityは単独主キーとして運用していますが、
> 複合主キーなentityを扱う方法はありますでしょうか?

正直なところ,JPA で複合主キーを使ってもいいことは
何もないと思っているので,積極的にサポートするかは
微妙です.

複合主キーとは別に,@Embeddable はサポートすべきだと
思うので,そうすれば結果的に @EmbeddedId を使った
複合主キーもサポートできるかもしれませんが...

あと,本題とは関係ありませんが,主キーにプリミティブ型を
使うのは Kuina-Dao 的に推奨しません.
上の例だと,findByProperties() で渡す MtType は主キーである
id が null にならないため必ず問い合わせ条件に含まれてしまい,
あまり役に立たないものになってしまいます.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




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