JPQL ManyToMany sélectionner
J'ai une relation plusieurs-À-Plusieurs entre deux entités appelées: Voiture et le Concessionnaire.
En natif MySQL j'ai:
car (id and other values)
dealership (id and other values)
car_dealership (car_id and dealership_id)
Et la requête que je veux faire en JPQL est:
#Select List of cars in multiple dealerships
SELECT car_id FROM car_dealership WHERE dealership_id IN(1,2,3,56,78,999);
Quelle est la bonne façon de faire de la JPQL équivalent?
Mon Java signature de la méthode est:
public List<Car> findByDealership(List<Dealership> dealerships);
J'ai essayé
//TOTALLY WRONG QUERY CALL!!!
Query query = em.createQuery("SELECT c FROM Car c WHERE :dealer_ids IN c.dealerships");
List<Long> dealerIds = new ArrayList<Long>();
for(Dealership d : dealerships) {
dealerIds.add(d.getId());
}
query.setParameter(":dealer_ids", dealerIds);
List<Dealership> result = (List<Dealership>) query.getResultList();
return result;
}
Voici mes Annotations JPA pour une telle relation en java:
@Entity
@Table(name = "car")
public class Car implements Serializable {
//Setup of values and whatnot....
@ManyToMany
@JoinTable(name = "car_dealership", joinColumns =
@JoinColumn(name = "car_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "dealership_id", referencedColumnName = "id"))
private List<Dealership> dealerships;
... other stuff (getters/setters)
}
@Entity
@Table(name = "property")
public class Dealership implements Serializable {
//Setting of values and whatnot
@ManyToMany(mappedBy = "dealerships")
private List<Car> cars;
.... other stuff(getters/setters)
}
MODIFIER
J'ai aussi essayé:
Query query = em.createQuery("SELECT c FROM Car c INNER JOIN c.dealerships d WHERE d IN (:deals)");
query.setParameter("deals", dealerships);
Qui a jeté l'Erreur:
org.eclipse.persistence.exceptions.QueryException
Exception Description: Object comparisons can only use the equal() or notEqual() operators.
Other comparisons must be done through query keys or direct attribute level comparisons.
Expression: [
Relation operator [ IN ]
Query Key dealerships
Base stackoverflow.question.Car
Constant [
Parameter deals]]
source d'informationauteur gtgaxiola
Vous devez vous connecter pour publier un commentaire.
Le paramètre doit être une collection de Concession instances.
Si vous souhaitez utiliser une collection de concession Id, utilisez
Remamber que JPQL toujours utiliser les entités, tracé des attributs et des associations. Jamais de la table et les noms de colonne.