У меня есть эти объекты:Spring JPA запроса данных ведет себя неожиданно
public class Order_status_sas {
private Order_sas order;
private Date lastModified;
...
}
public class Order_sas {
private long id;
...
}
Мой CrudRepository:
public interface StatusesWareHouseRepository extends CrudRepository<Order_status_sas, Long> {
Order_status_sas findFirstByOrderIdOrderByLastModifiedDesc(long id);
}
Я ожидаю, что метод findFirstByOrderIdOrderByLastModifiedDesc
будет возвращать первую строку из таблицы Order_status_sas
, где order.id = <some_id>
отсортированный по полю lastModified
, но в журнале я вижу этот вопрос:
Hibernate: select ...
from order_status_sas a
left outer join orders_sas b
on a.order_id=b.id
where b.id=?
order by a.last_modified desc
Этот запрос не возвращает мне одну строку, но возвращает список строк. Кажется, что Spring Data не смотрят на слово First
в имени моего метода. Кроме того, я получаю Исключение:
org.springframework.dao.IncorrectResultSizeDataAccessException:
result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements
Пожалуйста, скажите мне, что я делаю неправильно и как я могу достичь своей цели?
EDITED: Я отредактировал мой StatusesWareHouseRepository
с пользовательским запросом:
@Query("select s from Order_status_sas s where s.order.id = ?1 order by s.lastModified desc limit 1")
Order_status_sas findFirstByOrderIdOrderByLastModifiedDesc(long id);
но запрос, выполненный Hibernate, не изменились. Это выглядит следующим образом:
select ...
from order_status_sas s
where s.order_id=?
order by s.last_modified desc
На самом деле, это выглядит точно так же, как Spring Data смотрит на слово 'first' в вашем имени метода, или вы Wouldn» t получить 'IncorrectResultSizeDataAccessException'.Если у вас нет возможности изменить модель домена, вам, скорее всего, придется использовать запрос «Критерии» или ручной запрос. – avgvstvs