Question

J'ai une application Java EE et j'utilise Hibernate. Les objets de domaine, j'ai changé la liste / ArrayList Set / HashSet, car il est préférable d'utiliser des ensembles.

Mais dans ma mise en œuvre Dao 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, j'obtiens une erreur:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set

Que puis-je faire pour éviter cette erreur?

Merci à l'avance et meilleures salutations.

Était-ce utile?

La solution

List<Item> list = sess.createQuery("from Item").list();
Set<Item> items = new HashSet<Item>(list);  

sess.createQuery("from Item").list(); renvoie une liste de tableau d'éléments résultants, si vous avez besoin dans Set vous pouvez le faire comme indiqué dans le code

Autres conseils

  

Les objets de domaine, j'ai changé la liste / ArrayList Set / HashSet, car il est préférable d'utiliser des ensembles.

Il est pas « meilleur » à l'utilisation Set, cela dépend entièrement de ce que vous avez besoin. Mais de toute façon, le type de collection que vous utilisez dans vos objets de domaine et le type de retour de Query#list() sont deux choses sans rapport avec .

Personnellement, je ne peux pas dire que je vois beaucoup de valeur à convertir le résultat d'une requête dans un Set (en dehors de manger plus de mémoire), sauf si vous voulez explicitement supprimer doublons à partir des résultats de la requête bien sûr (mais dans ce cas, je conteste les correspondances).

Maintenant, si vous insistez, les différentes implémentations de Set ont un constructeur qui prend un Collection (et la question est essentiellement un double de pour convertir manière la plus simple d'une liste à un ensemble - Java )

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top