Hibernate -> ArrayList ne peut pas être jeté à l'Ensemble
J'ai une application Java EE et j'utilise Hibernate. Les objets du domaine, j'ai changé la Liste /liste de tableaux pour Définir /HashSet, car il est préférable d'utiliser des Ensembles.
Mais dans mon Dao mise en œuvre je rencontre un problème:
public Set<Person> getAllPersons() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session sess = sessionFactory.getCurrentSession();
Transaction tx = sess.beginTransaction();
@SuppressWarnings("unchecked")
Set<Item> items = (Set<Item>) sess.createQuery("from Item").list();
tx.commit();
return items;
}
Ici, je reçois une erreur:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set
Que puis-je faire pour éviter cette erreur?
Merci d'avance & Meilleures Salutations.
Êtes-vous sûr que vous savez quelle est la différence entre un jeu et une liste est? Car en aucun cas est-il "mieux" pour l'utilisation d'un Ensemble. Vous utiliser chaque fois que vous ne voulez qu'une seule instance d'un objet dans votre collection, alors vous pouvez avoir plusieurs instances d'un même objet dans une liste.
OriginalL'auteur Tim | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
sess.createQuery("from Item").list();
va retourner un tableau la liste des éléments, si vous en avez besoin dans le Jeu, vous pouvez le faire comme indiqué dans le codeproblème mineur, il doit être
Set<Item> items = new HashSet<Item>(list);
. En dehors de cela: +1"reconstruire la base de données qui pourrait ne pas être un option" - Cela n'a aucun sens,
Query.list()
retourne toujours uneList
: docs.jboss.org/hibernate/stable/core/javadoc/org/hibernate/...le lien est rompu.
OriginalL'auteur Jigar Joshi
Ce n'est pas "mieux" pour utiliser
Set
, il dépend entièrement de ce que vous avez besoin. Mais de toute façon, le type de collection que vous utilisez dans votre domaine d'objets et le type de retour deQuery#list()
sont deux choses sans rapport entre elles.Personnellement, je ne peux pas dire que je vois beaucoup de valeur à convertir le résultat d'une requête dans un
Set
(à l'exception de manger plus de mémoire), à moins que vous ne souhaitiez supprimer les doublons dans les résultats de la requête bien sûr (mais dans ce cas, je voudrais contester la mappings).Maintenant, si vous insistez, les différents
Set
implémentations ont un constructeur qui prend unCollection
(et la question est essentiellement une copie de Manière la plus facile de convertir une Liste à un Jeu? - Java).OriginalL'auteur Pascal Thivent