2011-02-24 10 views
0

これは、HibernateとPostgreSQLを使用するJavaEE6アプリケーションです。ユーザーはデータベース内で作成され、長IDを生成する@GeneratedValue(strategy = GenerationType.AUTO)となります。 user_name列の名前の一意性を保証できないため、データベースのuser_id列をログイン領域の名前列(たとえばrequest.login(id.toString(), password))として使用しようとしています。ただし、Glassfishv3で組み込みのFORM認証を使用すると、データベースの列がvar charであるとメカニズムが想定しているため、失敗します。
私は、ユーザーがデータベースに列string_idを作成するのと同時に作成する方法を探しています。この値は自動的にStringに変換されて生成されたIDです。後の操作でそれを行うことができましたが、これをワンショットで実行できるかどうかは疑問でした。 @PrePersistを試しましたが、この段階でIDが生成されていないようです。ログインを行うスマートな方法がありますか?作成時に生成されたIDを文字列として別の列にコピーする

ありがとうございました。

答えて

0

あなたは一発でそれを行うことができます - https://gist.github.com/786238

+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(); 

コードしかしem.persist(A)以上の利点があります。 a.setName(a.getId()。toString()); em.flush()?なぜそれはワンショットですか? – user244129

関連する問題