Hibernate : java.lang.ClassCastException: java.lang.Entier ne peut pas être jeté à java.lang.Double
Mon Personnel de l'Entité définie dans Java est comme ceci :
final public class Staff {
private int staffId;
private String firstName = null;
private String lastName = null;
private String Email = null;
private double salary;
//and the setters and getters
}
Mon code de Requête :
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Staff staff = null;
try {
Criteria criteria = session.createCriteria(dto.Staff.class);
criteria.add(Restrictions.eq("salary", 1000000));
staff = (Staff) criteria.uniqueResult();
} catch(Exception e) {
System.out.println("Error : " + e);
} finally {
session.close();
}
Mais lorsque je l'exécute, j'obtiens un message d'erreur qui dit :
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
Si je convertir explicitement le nombre à un double cela fonctionne :
criteria.add(Restrictions.eq("salary", (double) 1000000));
Est-il un moyen de le faire sans l'explicite casting?
Aussi j'ai pensé qu'en Java, Entier à Double conversion est Implicite?
OriginalL'auteur Amitab Das | 2013-11-15
Vous devez vous connecter pour publier un commentaire.
Hibernate en le considérant comme un entier, dire que c'est le double.
Est-il possible d'ajouter le 'd' pour le nombre de façon dynamique? Parce que je suis en train d'écrire une fonction qui est censé définir n'importe quel type de restriction. En fait, il pourrait être un entier ou une chaîne de caractères. Est-il possible de le faire?
Oui. Vous pouvez écrire
new Double(xxx.toString())
- ce qui va faire la bonne chose, sixxx
est unDouble
, unInteger
, unString
ou plus généralement tout ce qui peut raisonnablement être converti enDouble
.OriginalL'auteur Suresh Atta
La restriction.eq prend un objet, donc pas de conversion implicite est possible.
OriginalL'auteur Scary Wombat