目的上、挿入直後にオブジェクトの ID を取得する必要があります。次のコードで回避できます。
session.save(Object o) // insert to database
findByPorperty( o.property ) // Return the inserted object along with the id
オブジェクトを見つけるにはセッションを再度開く必要があるため、上記のコードは不十分だと思います。つまり、
- IDを取得するより良い方法はありますか?
- ある場合、オブジェクトのバッグを挿入した後に ID のリストを取得するために同じ戦略を適用できますか?
ベストアンサー1
のセッション.save(オブジェクト)オブジェクトの ID を返します。または、保存を実行した後に ID 取得メソッドを呼び出すこともできます。
Save() の戻り値:
Serializable save(Object object) throws HibernateException
戻り値:
the generated identifier
ゲッターメソッドの例:
UserDetails エンティティ:
@Entity
public class UserDetails {
@Id
@GeneratedValue
private int id;
private String name;
// Constructor, Setters & Getters
}
ID をテストするロジック:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();
UserDetails user1 = new UserDetails("user1");
UserDetails user2 = new UserDetails("user2");
//int userId = (Integer) session.save(user1); // if you want to save the id to some variable
System.out.println("before save : user id's = "+user1.getId() + " , " + user2.getId());
session.save(user1);
session.save(user2);
System.out.println("after save : user id's = "+user1.getId() + " , " + user2.getId());
session.getTransaction().commit();
このコードの出力:
保存前: ユーザー ID = 0、0
保存後: ユーザーID = 1、2
この出力によると、エンティティを保存する前にIDが設定されていなかったことがわかりますUserDetails
。エンティティを保存すると、HibernateはオブジェクトのIDを設定しますuser1
。user2