我有以下实体:
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
请告诉我我做错了什么,以及如何实现我的目标?
编辑过的内容: 我用自定义查询编辑了我的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