重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

現在O/RマッパーでButteflyPersistenceを使っているのですが、主キーがうまくマッピングできていないらしく更新・削除の処理をすると”No primary key columns for object mapping”というエラーが発生します。主キーを割り当てる方法がございましたらご教授ください。

設定したファイルの内容は以下の通りです。
DBはH2を使っています。

CREATE TABLE user (
ID Identity,
NAME varchar(255) default NULL,
AGE Integer (2),
PRIMARY KEY (ID)
)


Userクラス

import com.jenkov.db.itf.mapping.AClassMapping;
import com.jenkov.db.itf.mapping.AGetterMapping;
import com.jenkov.db.itf.mapping.ASetterMapping;

@AClassMapping(mappingMode="modify", tableName="user")
public class User {
@SuppressWarnings("unused")
private static final long serialVersionUID = 1L;
private int id;
private int age;

@AGetterMapping(columnName="ID",databaseGenerated=true)
public int getId() {
return id;
}
@ASetterMapping(columnName="ID")
public void setId(int id) {
this.id = id;
}
private String name;
@AGetterMapping(columnName="NAME")
public String getName() {
return name;
}
@ASetterMapping(columnName="NAME")
public void setName(String name) {
this.name = name;
}
@AGetterMapping(columnName="AGE")
public int getAge() {
return age;
}
@ASetterMapping(columnName="AGE")
public void setAge(int age) {
this.age = age;
}
}

A 回答 (1件)

こんなO/Rマッパーがあるんですね。

とりあえず、ドキュメントさらっとみてみましたが
クラスアノテーションのmappingModeがmodifyの場合、DatabaseMeta情報を勝手に読みこむようです。
userテーブルの定義を見る限り、primary keyの定義がないので、それでエラーが発生するのではないですか?
あと、,databaseGenerated=trueが付いていますが、同様にテーブル側での自動生成(オートインクリメント?)の定義が必要だと思われます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!