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

T.N [E-MAIL ADDRESS DELETED]
2007年 1月 20日 (土) 18:05:12 JST


 中村友則です。

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

テーブルは以下のようになっています。
create table MtType (id bigint not null, type char(1) not null,
 detail varchar(20) not null, constraint primary key (id, type));

Doltengで自動生成したentityは以下のようになっています。
@Entity
public class MtType {

    @Id
    @GeneratedValue
    private long id;

    @Id
    @GeneratedValue
    private String type;

    private String detail;
(以下略)
}

そしてdaoにentityのプロパティで検索をするメソッドを追加して、
public List<MtType> findByProperties(MtType mtType);

以下のように実行すると
MtType mtType = new MtType();
mtType.setType("S");
List<MtType> list = this.mtTypeService.findByParameter(mtType);
(MtTypeServiceはMtTypeDaoに委譲しているだけ)

 以下のようなメッセージが表示されてエラーになります。

JPQLを実行します
	SELECT e FROM MtType AS e WHERE (e.type = 'S')
トランザクションをロールバックしました
END
jp.co.school.web.impl.MtTypeServiceImpl#findByParameter([E-MAIL ADDRESS DELETED])
Throwable:java.lang.IllegalArgumentException:
org.hibernate.QueryException: could not resolve property: type of:
jp.co.school.entity.MtType [SELECT e FROM jp.co.school.entity.MtType AS
e WHERE (e.type = 'S')]
END jp.co.school.web.student.StudentMenuPage#initialize()
Throwable:java.lang.IllegalArgumentException:
org.hibernate.QueryException: could not resolve property: type of:
jp.co.school.entity.MtType [SELECT e FROM jp.co.school.entity.MtType AS
e WHERE (e.type = 'S')]

 ここで、entityのtypeプロパティの@Idと@GeneratedValueを削除し、
単独主キーにすると意図どおり動くようになります。
 middlegenで生成したPKクラスを持つentityでも同様になりました。

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

宜しくお願いします。



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