2010-04-29 4 views
1

Disons que j'ai un ArrayList plein de produits qui doivent être validés dans la base de données via Hibernate. Il y a déjà un grand nombre de produits dans la base de données. Chaque produit a un identifiant. Notez que ce n'est pas le PK qui est généré automatiquement par Hibernate. Mes questions sont: quelle est la meilleure façon de détecter les conflits avec cet ID? Je cherche une méthode relativement efficace d'obtenir, à partir de la base de données, une liste de produits qui partagent un ID avec l'un des produits dans ma liste de tableaux. Tout est dans une seule table appelée Produits et l'attribut ID est dans la colonne ProductID. La façon dont je l'ai fait est de saisir une liste de tous les produits dans la base de données, et de comparer chacun d'entre eux avec chaque entrée dans ma liste de tableaux - mais c'est vraiment inefficace et je ne pense pas que cela fonctionnerait bien avec un plus grande base de données. Comment devrait-il être fait? Merci. Je dis "relativement" efficace parce que l'efficacité n'est pas la principale préoccupation, mais il ne devrait pas prendre beaucoup de temps à tester contre une table de ~ 1000-5000 lignes. Aidez-moi?Comment détecter les conflits de colonnes avec Hibernate?

EDIT * Je suis très novice en matière d'hibernation et voici le meilleur que j'ai trouvé. Comment cela ressemble-t-il?

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList 
    Query query = session.createQuery("select product from Product product where product.id = :id"); 
    query.setLong("id", id); 
    for(int i = 0; i < query.list().size(); i++){ 
     listOfConflictingProducts.add((Product) query.list().get(i)); 
    } 
} 

Répondre

1

je qualifierais Query.list() qu'une seule fois: sinon la requête pourrait être ré-exécuter à chaque fois:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList 
    Query query = session.createQuery("select product from Product product where product.id = :id"); 
    query.setLong("id", id); 
    List result = query.list(); 
    for(int i = 0; i < result.size(); i++){ 
     listOfConflictingProducts.add((Product) result.get(i)); 
    } 
} 

Ou, plus simplement:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList 
    Query query = session.createQuery("select product from Product product where product.id = :id"); 
    query.setLong("id", id); 
    for(Object obj: query.list()){ 
     listOfConflictingProducts.add((Product)obj); 
    } 
} 
+0

Ahh qui est génial, merci vous pour le bon conseil. Aussi bon à savoir, j'étais au moins dirigé dans la bonne direction. Merci beaucoup. Accepté. – Slim

Questions connexes