web-dev-qa-db-ja.com

Hibernateを使用して最後に挿入されたIDを取得するにはどうすればよいですか?

Hibernateで最後に挿入された値のIDを取得したい。

検索後:

Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();

しかし、次のコードは私にこのエラーを与えます:

Java.lang.ClassCastException:Java.math.BigIntegerをJava.lang.Longにキャストできません

あなたの考えを共有してください!

解決策

Long lastId = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();

インポートすることを忘れないでください:

インポートJava.math.BigInteger;

11
Mohit Bhansali

エラーはかなり明確です。 BigIntegerではなく long を返します

BigInteger に割り当てる必要があります。そして、そこから longValue() を取得します。

12
Suresh Atta
public Integer save(Smartphones i) {
    int id = 0;
    Session session=HibernateUtil.getSessionFactory().openSession();
    Transaction trans=session.beginTransaction();
    try{
        session.save(i);   
        id=i.getId();
        trans.commit();     
    }
    catch(HibernateException he){}
    return id;
}
4
surya handoko

実際に最後の挿入IDであるSerializableオブジェクトを返すsaveを使用するだけです。サンプルコード:

Session session=this.getSessionFactory().getCurrentSession();
    int result = -1;
    try {
        Serializable ser = session.save(paper);
        if (ser != null) {
            result = (Integer) ser;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;

テスト実行:

int result = paperService.save(paper);
    System.out.println("The id of the paper you just added is: "+result);

そしてここに出力があります:

The id of the paper you just added is: 3032
3
Linyun Liu

uniqueResult()の戻り値の型はBigIntegerではなくLongであるため、次のようにする必要があります。

_long lastId = session.createSQLQuery("SELECT LAST_INSERT_ID()")
                     .uniqueResult()  // this returns a BigInteger
                     .longValue();    // this will convert it to a long value
_

メソッドuniqueResult()は、クエリSELECT LAST_INSERT_ID()のため、BigIntegerのみを返します。

0
bobbel