[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 メーリングリストの案内