当只需要一个对象时,查询返回多个对象

时间:2014-02-20 21:50:48

标签: mysql spring-data-jpa

我有一张简单的表格:

+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| ID                | bigint(20)   | NO   | PRI | NULL    |       |
| AdmissionDateTime | datetime     | NO   |     | NULL    |       |
| AdmissionEvent    | varchar(255) | YES  |     | NULL    |       |
| DischargeDateTime | datetime     | YES  |     | NULL    |       |
| DischargeEvent    | varchar(255) | YES  |     | NULL    |       |
| DemographicId     | bigint(20)   | NO   | MUL | NULL    |       |
| FacilityId        | bigint(20)   | YES  | MUL | NULL    |       |
| VisitId           | bigint(20)   | NO   | MUL | NULL    |       |
| WardId            | bigint(20)   | NO   | MUL | NULL    |       |
+-------------------+--------------+------+-----+---------+-------+

我在其上运行以下JPA(Spring-data)查询:

@Query("SELECT w FROM WardTransaction w WHERE w.id = (SELECT MAX(x.id) FROM
WardTransaction x WHERE w = x AND w.visit = :visit)")
public WardTransaction findCurrent(@Param("visit") Visit visit);

有时我会遇到以下异常。

org.springframework.dao.IncorrectResultSizeDataAccessException: More than one
result was returned from Query.getSingleResult(); nested exception is
javax.persistence.NonUniqueResultException: More than one result was returned from
Query.getSingleResult()

我无法弄清楚为什么会这样。它对我来说似乎没有多大意义,因为只有一个'MAX' - 尤其是Id(我过去曾使用'admissionDate')。

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

你为什么选择桌子?你应该选择列。

试试这个

   @Query("SELECT * FROM WardTransaction w WHERE w.id in (SELECT MAX(x.id) 
   FROM WardTransaction x WHERE w.id = x.id AND w.visit = :visit)")

答案 1 :(得分:0)

此查询更简单,我认为可以满足您的需求:

SELECT something
FROM sometable
Where something = someotherthing
ORDER BY sometable.id DESC
LIMIT 1

基本上它返回顶部ID最高的结果并抓取第一个。

相关问题