パスワードを忘れた? アカウント作成
44951 journal

tokenの日記: S2Daoでハマる(解決?) 1

日記 by token

次のようなテーブルを、

create sequence user_seq;
 
create table user (
id integer not null default nextval('user_seq'),
email varchar not null,
targetid integer default null,
delete_flag boolean default false,
versionno integer not null default 1,
primary key(id),
foreign key(targetid) references TARGET(id)
);

を作り、DoltengにUserDaoを作成させる。

1日以上の時間が経った後だった
適当なPageクラスの中で、UserDao#selectById()を実行すると、

[EDAO0019]positrium.tenko.dao.UserDao のupdateメソッドの初期化時に例外が発生しました。理由は org.seasar.framework.exception.SRuntimeException: [EDAO0020]Primary KeyのみのテーブルをSQL文の自動生成で更新することはできません

が発生する。

Primary Keyのみのテーブルぢゃないのに、こんなメッセージっておかしいよなあ。それに、UserDao#update()は呼んでないのに。どこでどんなコードが生成されてるか解らないと、開発ストップだ。

s2-dao-1.0.49.jar
ライブラリのソースを追ってみると、org.seasar.dao.impl.AbstractAutoStaticCommand#setupUpdatePropertyTypes()で、何故か全てのプロパティがPrimary Keyとして認識されてるか、またはプロパティが一切認識されていないかのどちらからしい。ここ、propertyNames変数のサイズがゼロだったらプロパティが認識されていませんとかってメッセージを出した方がいいぞ、絶対。プロパティが一切認識されていない事とPKばかりのテーブル構成とじゃ全然意味が違うし。

でも、それはそれ、としても、プロパティ名とテーブルの列名に食い違いはないんだよなあ。なぞ過ぎ。いったん、sequenceを使わない方法で試してみようかしら。

追記:同日
解決?
とりあえずTomcatを再起動して、Seasar2のHOT deployを初期化(classを最新のものに置き換える?)してみたら、変なエラーは出なくなった。それにしても、さっきのエラーは良くわからない。ちょうどプロパティが一切認識されていない状況だったのはアタリだったけど、update()が呼ばれたのは想定外。S2Daoってdaoの健全性テストまでしっかりチェックするのかなぁ・・。

ちなみに、sequenceとか関係なかった。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

読み込み中...