2017-08-23 1 views
0
public class Medicine as Entity 
     ... 
     ...  
    @Lob 
    @ManyToMany 
    @JoinTable(name = "Medicine_Ingredients") 
    private Set<Ingredient> ingredientList = new HashSet<>(); 

Ensuite, j'ai une autre liste comprend des objets Ingrédients. Ce que je veux faire est dans le dépôt, je veux pousser List en tant que paramètre et obtenir des médicaments si sa liste ingredientList contient un paramètre List.Spring Data Jpa Envoyer liste en tant que paramètre de recherche

J'ai essayé de faire cela en tant qu'objets d'itération dans les boucles. Mais je ne pense pas que ce soit une solution propre. Merci d'avance! Mise à jour, ce code bloque comment je gère le problème pour l'instant mais je ne pense pas que ce soit une solution propre. Sera un problème se promener dans tous les médicaments qui viennent d'ici:

medicineRepository.findByTradeNameStartingWithAndManufacturerStartingWith(
        medicineSearchModel.getTradeName(), 
        medicineSearchModel.getManufacturer() 
      )) 

---- Bloc de code

 List<Medicine> medicineList = new ArrayList<>(); 
     ArrayList<String> sub_ingredients = new ArrayList<>(); 

     for (Ingredient search_ingredient : medicineSearchModel.getIngredientList()) { 
      sub_ingredients.add(search_ingredient.getId().toString()); 
     } 
     for (Medicine medicine : medicineRepository.findByTradeNameStartingWithAndManufacturerStartingWith(
       medicineSearchModel.getTradeName(), 
       medicineSearchModel.getManufacturer() 
     )) { 
      ArrayList<String> super_ingredients = new ArrayList<>(); 
      for (Ingredient medicine_ingredient : medicine.getIngredientList()) { 
       super_ingredients.add(medicine_ingredient.getId().toString()); 
      } 
      if (super_ingredients.containsAll(sub_ingredients)) { 
       medicineList.add(medicine); 
      } 
     } 
     return medicineList; 
+0

Montrez-nous votre exemple de travail simple, afin que nous puissions comprendre ... –

+0

@RajaAnbazhagan Je viens de mis à jour la question, merci! – celnmeh

+0

A '@ ManyToMany' ne peut pas être' @ Lob' !!! Un @ Lob est l'endroit où vous voulez SERIALISE le champ entier dans une seule colonne! –

Répondre

0

vous pouvez essayer. Je n'ai pas testé ce code, mais j'avais fait quelque chose de similaire.

REMARQUE:
si ing where ing in ne fonctionne, vous voudrez peut-être pas changer à ing where ing.id in et préparer une liste d'ID ingrédients pour définir comme paramètre.

EntityManager em = ... 

Query query = em.createQuery("select m from Medicine m left join fetch m.ingredientList ing where ing in :lstIngredient"); 
query.setParameter("lstIngredient", yourListParam); 
+0

EntityManagerFactory ne peut pas résoudre notre unité de persistance déclarée dans persistence.xml. c'est "hibernatepersistenceprovider" – celnmeh

+0

J'ai vu une balise '' '' JPA''' dans votre question et j'ai pensé qu'il est facile pour vous d'obtenir une instance EntityManager. Si vous utilisez Hibernate directement, vous pouvez utiliser org.hibernate.Session: '' ' Usine de SessionFactory = .. // Je pense que vous l'avez Session session = factory.getCurrentSession(); Requête de requête = session.createQuery (... la même que ci-dessus ...); '' ' – ThanhLoyal