0

これは、Hibernate と PostgreSQL を使用する JavaEE6 アプリケーションです。データベースにユーザーが作成され、@GeneratedValue(strategy = GenerationType.AUTO)長い ID が生成されます。request.login(id.toString(), password )user_name 列の名前の一意性を保証できないため、データベースの user_id 列をログイン領域の名前列として使用しようとしています (例: )。ただし、Glassfishv3 で組み込みの FORM 認証を使用すると、メカニズムがデータベース内の列が var char であることを期待しているように見えるため、失敗します。
したがって、ユーザーがデータベースに作成されると同時に、列 string_id を入力する方法を探しています。この値は、自動的に生成された ID が文字列に変換されます。次の手術でもできたのですが、これが一発でできるのだろうかと思っていました。@PrePersist を試してみましたが、この段階では ID が生成されていないようです。または、ログインを実行するためのよりスマートな方法がありますか?

ありがとう。

4

1 に答える 1

0

一発でできるよ~

@Entity
public class A {
  @Id @GeneratedValue(strategy=SEQUENCE)
  public Integer getId() { return id; }
  public void setId(Integer id) { this.id = id; }
  private Integer id;

  public String getName() { return name; }
  private void setName(String name) { this.name = name; }
  private String name;
}

Serializable id = em.unwrap(Session.class).save(a);
a.setName("Why oh why redundancy? " + id);
em.flush();

https://gist.github.com/786238からコピーされたコード

于 2011-02-24T18:52:15.977 に答える