2010-07-22 4 views
0

avoir un problème particulier avec hibernate. J'ai une fonction d'hibernation comme celle-ci.Problème avec Hibernate findById

@SuppressWarnings("unchecked") 
public List<AppResponse> findByResponseId(long requestId) { 
    return (List<AppResponse>) jdbcReference.getSessionFactory().getCurrentSession() 
     .createCriteria(AppResponse.class).add(Restrictions.eq("requestId",requestId)) 
     .list(); 
} 

Et cela est censé retourner une liste avec 4 "AppResponses" pour requestId = dire ''. La fonction comme attendu renvoie une liste avec quatre objets AppResponse.Mais le problème est que tous les 4 objets représentent la même ligne. Je ne reçois pas 4 objets différents (un par rangée). Quelqu'un at-il rencontré un tel problème? Quel pourrait être le problème ? "Id" me fait penser "clé primaire"

+1

Activer les journaux Hibernate afin de connaître la requête exacte envoyée au SGBD. – sinuhepop

+0

Soit poster votre solution comme réponse ou supprimer la question, surtout s'il s'agissait d'un PEBCAK :) –

+0

J'ai déjà ajouté un commentaire à la réponse de duffymo. – chedine

Répondre

2

Vous ne devriez pas retourner une liste de quelque chose dans ce cas - c'est soit un objet unique ou rien.

Votre "1234" ressemble à une clé candidate qui n'a pas coupé la clé primaire. Il devrait avoir un index et être extrait en utilisant une requête avec une clause WHERE.

MISE À JOUR: Avez-vous redéfini equals et hashCode correctement? Quand vous dites qu'ils représentent la même rangée, cela me suggère que vous avez des données en double dans votre tableau (rien d'unique sur les objets au-delà du "id" que vous citez) ou que vous n'avez pas implémenté equals et hashCode correctement.

+0

Simple.Hibernate traduit ce qui précède comme SELECT LISTES DE COLONNES D'APPRESPONSES WHERE REQUEST_ID = ?. La requête est correcte et elle devrait renvoyer plus que des lignes. – chedine

+0

Je l'ai compris. C'est mon erreur. J'ai mentionné le mauvais champ comme PK. – chedine

Questions connexes