我有这些实体:
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不用看word First
在我的方法名称中。另外,我得到一个异常(exception):
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
最佳答案
好的,我理解@PriduNeemre 的观点。让我们离开 DB 模型,回到 JPA 问题。这是另一个例子:
@Entity
public class Client {
....
}
public interface ClientRepository extends CrudRepository<Client, Integer> {
Client findFirstByOrderByNameDesc();
}
Hibernate 查询仍然是这样的:
select ...
from clients c
order by c.name desc
关于java - Spring 数据 JPA 查询行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27854897/