0
我添加了一个新的查询方法,以现有的JPA存储库,其从OrderItem的实体,以便检索一个id为Long
类型:对于返回Long值的查询,Spring IncorrectResultSizeDataAccessException? Java的
@Transactional("order_item")
public interface OrderItemRepository extends PagingAndSortingRepository<OrderItem, Integer> {
...other queries
/**
* Retrieves the latest modification Id of order item entity
*
* @param orderItemId id
* @return modificationId | null if order item is not a print product
*/
@Query("select pri.modificationId from OrderItem as oi"
+ " join oi.physicalItems as phys"
+ " join phys.printItem as pri"
+ " where oi.id = :orderItemId"
+ " order by pri.modificationId desc")
Long findLatestmodificationIdForOrderItem(@Param("orderItemId") Integer orderItemId);
}
查询大部分的作品,但有时也与此错误日志中突破:
org.springframework.dao.IncorrectResultSizeDataAccessException:结果返回多个元素;嵌套的例外是javax.persistence.NonUniqueResultException:结果在 com.sun.proxy返回多个元素
$ Proxy993.findLatestModificationIdForOrderItem(来源不明)
咨询这太问题后:setMaxResults for Spring-Data-JPA annotation?
该解决方案是将方法返回类型更改为List,但htis将破坏我的合同并需要在很多地方重构。
如何限制查询总是返回一个值而不是中断?
感谢
我要离开的查询和合同。更改接口的实现以返回按时间排序的List,并返回最新的一个(列表中的第一个或最后一个)。 – duffymo