मेरे पास दो इकाइयों के बीच कई संबंध हैं: कार और डीलरशिप।जेपीक्यूएल मल्टी टॉनी चुनिंदा
देशी MySQL में मेरे पास है:
car (id and other values)
dealership (id and other values)
car_dealership (car_id and dealership_id)
और क्वेरी मैं JPQL में बनाना चाहते है:
#Select List of cars in multiple dealerships
SELECT car_id FROM car_dealership WHERE dealership_id IN(1,2,3,56,78,999);
JPQL बराबर बनाने के लिए उचित तरीका क्या है?
मेरे जावा विधि हस्ताक्षर है:
public List<Car> findByDealership(List<Dealership> dealerships);
मैं
//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;
}
यहाँ की कोशिश की है जावा में इस तरह के रिश्ते के लिए मेरी जेपीए एनोटेशन है:
@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)
}
संपादित
012,मैं भी कोशिश की है:
Query query = em.createQuery("SELECT c FROM Car c INNER JOIN c.dealerships d WHERE d IN (:deals)");
query.setParameter("deals", dealerships);
कौन सा त्रुटि फेंक दिया:
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]]
धन्यवाद, कृपया मेरा संपादन देखें। – gtgaxiola
ऐसा लगता है कि ग्रहण लिंक वस्तुओं की तुलना नहीं करना चाहता है। यह हाइबरनेट के साथ काम करेगा। मेरे दूसरे सुझाव का प्रयोग करें, फिर, जो आईडी की तुलना करता है। –
धन्यवाद ... बस एक नोट के रूप में EclipseLink को IN (: डीलरशिप आईडी) भाग में कोष्ठक पसंद नहीं है ... – gtgaxiola