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