gpt4 book ai didi

java - Spring 数据 JPA 查询行为异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:56 25 4
gpt4 key购买 nike

我有这些实体:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com