Я пытаюсь получить все объекты Dna со статусом (INT) 1,2,3,4, но Eclipselink дает мне ошибку.Сравнение целых чисел в JPA
ReadAllQuery (имя = "Dna.findAllButDeleted" referenceClass = Днк jpql = "SELECT г от Dna г, где r.status = 1 ИЛИ r.status = 2 или r.status = 3 или 4 = r.status «)
@GET
@Path("all")
@Produces({"application/xml", "application/json"})
public List<Dna> findAllButDeleted(){
System.out.println("**********findAllButDeleted*************");
Query query = em.createNamedQuery("Dna.findAllButDeleted");
List<Dna> lista = query.getResultList();
return lista;
}
@NamedQuery(name = "Dna.findAllButDeleted", query = "SELECT r FROM Dna r where r.status =1 OR r.status=2 OR r.status=3 OR r.status=4"),
ОШИБКА
Исключение [EclipseLink-6078] (Eclipse, послесвечение услуги - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException Исключение Описание: Класс аргумента для сравнения объектов неверен. Выражение: [ Base com.pako.entity.Dna] Mapping: [org.eclipse.persistence.mappings.ManyToOneMapping [состояние]] Аргумент: [1]
EDIT: Моя ошибка, теперь Я вижу проблему. Статус объекта Dna не является целым, а объектом. Как использовать несколько параметров? Похоже, что он использует только последний.
@ManyToOne(cascade = CascadeType.MERGE)
private Dnastatus status;
Dnastatus oneStatus = new Dnastatus(new Integer(1));
Dnastatus twoStatus = new Dnastatus(new Integer(2));
Dnastatus threeStatus = new Dnastatus(new Integer(3));
Query query = em.createNamedQuery("Dna.findAllButDeleted").
setParameter("status", oneStatus).
setParameter("status", twoStatus).
setParameter("status", threeStatus);
@NamedQuery(name = "Dna.findAllButDeleted", query = "SELECT r FROM Dna r where r.status = :status"),
EDIT2: Решение
List statusList = new ArrayList();
statusList.add(oneStatus);
statusList.add(twoStatus);
statusList.add(threeStatus);
statusList.add(fourStatus);
Query query = em.createNamedQuery("Dna.findAllButDeleted").
setParameter("statusList", statusList);
@NamedQuery(name = "Dna.findAllButDeleted", query = "SELECT r FROM Dna r where r.status IN (:statusList)")
Показать объект 'Dna'. – Kayaman
Y ur не использует запрос типа '@NamedQuery (name =" Dna.findAllButDeleted ", query =" SELECT r FROM Dna r где r.status In (1,2,3,4) "),' –
Показан поле " статус "класса" Dna "является обязательным условием для любого комментария. EclipseLink ясно думает, что это поле отношения N-1, поэтому не может быть целым числом. Так почему бы не показать это? –