Я добавил новый метод запроса к существующему хранилище JPA который извлекает идентификатор как тип Long
от OrderItem субъекта, как так: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 (Unknown Source)
После ознакомления с этим так вопрос:. setMaxResults for Spring-Data-JPA annotation?
Это решение заключалось в том, чтобы изменить тип возвращаемого метода в список, но htis нарушит мой контракт и потребует рефакторинга во многих местах.
Как я могу ограничить запрос, чтобы всегда возвращать одно значение и не прерывать?
Благодаря
Я бы оставить запрос и договор. Измените реализацию интерфейса, чтобы вернуть список, упорядоченный по времени, и вернуть последний (первый или последний в списке). – duffymo