hibernate - オブジェクトを保存した後にIDを取得する 質問する

hibernate - オブジェクトを保存した後にIDを取得する 質問する

目的上、挿入直後にオブジェクトの ID を取得する必要があります。次のコードで回避できます。

 session.save(Object o)   // insert to database
 findByPorperty( o.property ) // Return the inserted object along with the id

オブジェクトを見つけるにはセッションを再度開く必要があるため、上記のコードは不十分だと思います。つまり、

  1. IDを取得するより良い方法はありますか?
  2. ある場合、オブジェクトのバッグを挿入した後に 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を設定しますuser1user2

おすすめ記事