web-dev-qa-db-fra.com

Comment puis-je obtenir le dernier identifiant inséré avec Hibernate

Je veux récupérer l'id de la dernière valeur insérée dans Hibernate.

Après la recherche:

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

Mais le code suivant me donne cette erreur:

Java.lang.ClassCastException: Java.math.BigInteger ne peut pas être converti en Java.lang.Long

S'il vous plaît partagez vos pensées!

Solution

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

N'oubliez pas d'importer:

importer Java.math.BigInteger;

10
Mohit Bhansali

L'erreur est assez claire. Il retourne BigInteger et non long

Vous devez l'assigner à un BigInteger . Et obtenez longValue() de celui-ci.

11
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

Vous pouvez simplement utiliser save qui renvoie un objet Serializable qui est en réalité le dernier identifiant d'insertion. Exemple de code:

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;

Un test:

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

et voici la sortie:

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

Puisque le type de retour de uniqueResult() est BigInteger et non Long, procédez comme suit:

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

La méthode uniqueResult() ne renvoie qu'un BigInteger à cause de votre requête SELECT LAST_INSERT_ID().

0
bobbel