1

私はEbeanを使用しており、そのようなモデルを定義します。

@Entity
@Table(name = "users")
public class User extends Model {

    @Id
    public String id;

    public String email;

    public String name;

}

フィールドidStringであり、@Id注釈が付いていることがわかります。

今私はそれを保存します:

User user = new User();
user.id = "abc";
user.email = "a@a.com";
Ebean.save(user);

しかし、それを保存したとき、その値idは次のとおり1であることがわかりました。、指定していませabcん。

私はSQLをチェックし、テーブルが生成することを発見しました:

create table users (
  id                        varchar(255) not null,
  email                     varchar(255),
  name                      varchar(255),
  constraint pk_users primary key (id))
;

create sequence users_seq;

users_seqユーザーを挿入するときに使用されたseqがあることがわかります。

モデルを定義する方法、または@Idフィールドに何もしないようにEbeanを構成する方法は?指定した値を使用させますか?

===========

アップデート

申し訳ありませんが、この奇妙な動作は私の間違いによるものであることがわかりました。

はい、私はそれをplayframework 1で使用し、自分でplay-ebeanモジュールを作成しようとしました。しかし、何か問題があります。モデルを保存するときに、誤ってid値をクリアしてしまいました。

したがって、割り当てられた値abcが欠落している場合、Ebeanはseqを使用して新しい値を取得しようとします。

よろしくお願いします。また申し訳ありませんが、次回質問するときはもっと気をつけます。

4

2 に答える 2

3

別の一意のフィールドを作成し、それをオプションで使用することをお勧めします。String userCodeか何か?

Play with Ebeanは、Idの自動インクリメントを使用して、Idが一意であることを確認します。したがって、すべてのドキュメントでモデルのIDが数値であると想定されているため、個人的には変更しませんでした。

Playのルートを使用して、文字列IDでユーザーを検索し、Longidを使用して基本的な操作を実行することもできます。

(私はあなたがそれに尋ねると仮定しているので、私はPlayの文脈で書いています;))

于 2012-04-17T11:32:16.183 に答える
1

自分のフィールドで操作したい場合は、GenericModel代わりに拡張する必要があります。私はPlayFrameworkのコンテキストでも話しています。Model@Id

于 2012-04-17T11:53:08.187 に答える