java.lang.ClassCastException: java.les mathématiques.BigInteger ne peut pas être lancé à java.lang.Long
Je veux retourne le nombre de lignes à l'aide de sql natif. Mais la console me dit java.math.BigInteger cannot be cast to java.lang.Long
.
Quel est le problème? C'est ma méthode:
public Long getNumRows(Integer id){
Session session = null;
session = this.sessionFactory.getCurrentSession();
Query query = session
.createSQLQuery("SELECT COUNT(*) FROM controllnews WHERE news_id="
+ id + ";");
List firstResult = query.list();
return (Long) firstResult.get(0);
}
OriginalL'auteur John Smith | 2013-08-13
Vous devez vous connecter pour publier un commentaire.
Utilisation
BigInteger#longValue()
méthode, au lieu de moulageLong
:Semble
firstResult.get(0)
retourne unObject
. Une option est de transtypage àBigInteger
:Mais ne pas le faire. Au lieu d'utiliser de la manière prévue par Nambari dans les commentaires. Je ne suis pas un utilisateur de Hibernate, donc je ne peux pas fournir Hibernate solution spécifique.
Oh! Je n'ai pas utilisé Hibernate.
La méthode longValue() n'est pas défini pour le type d'Objet
Et votre réponse ne fonctionnera pas parce que le type de retour de firstResult.get(0) est l'Objet.
Bien qu'il travaille, s'il vous plaît regardez dans Hibernate Scalaires. C'est peut-être le moyen idéal ici.
OriginalL'auteur Rohit Jain
J'ai fait face à un même problème, j'ai utilisé Hibernate requêtes Scalaires, comme le suggère le commentaire de @Rohit Jain répondre. Grâce @nambari pour le commentaire.
Pour en venir au problème que nous avons,
Ces retournera une Liste de tableaux d'Objets (Object[]) avec des valeurs scalaires pour chaque colonne dans la
controllnews
table. Hibernate utilisera ResultSetMetadata pour en déduire l'ordre et les types de retour sont à valeurs scalaires.Pour éviter la surcharge de l'aide ResultSetMetadata, ou tout simplement pour être plus explicite dans ce qui est retourné, on peut utiliser addScalar():
Ce sera le retour de tableaux d'Objets, mais maintenant il n'utilisera pas ResultSetMetadata mais explicitement obtenir le
count
colonne commeLong
de l'objet resultset sous-jacent.Comment le
java.sql.Types
retourné à partir de ResultSetMetaData est mappés aux types de Hibernate est contrôlée par le Dialecte. Si un type spécifique n'est pas mappé, ou ne résulte pas dans le type attendu, il est possible de le personnaliser via des appels àregisterHibernateType
dans le Dialecte.Vous pouvez utiliser Requête#setParameter méthode pour éviter toute erreur dans la requête comme
Une confusion lorsque vous vous référez à Requêtes scalaires docs 4.0,
addScalar
méthode a le deuxième paramètreHibernate.LONG
, n'oubliez pas il a été abandonné depuis Hibernate version 3.6.XVoici le document obsolète, donc vous devez utiliser
LongType.INSTANCE
Lien
OriginalL'auteur Aniket Kulkarni