Especificar uma cláusula LIMIT em uma JPA2 repositório @instrução de Consulta

StackOverflow https://stackoverflow.com//questions/25015612

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu tenho o seguinte comando MySQL:

  "SELECT * FROM $this->tableName WHERE news_publication_id = '" + newsPublicationId + "' AND list_order > '" + listOrder +"' ORDER BY list_order LIMIT 1"

Eu comecei o tratamento de dados caminho fazendo primeiro uma Hibernate camada DAO.

Ele tinha os seguintes critérios baseados método:

  @Override
  public NewsHeading findNextWithListOrder(NewsPublication newsPublication, int listOrder) {
    Criteria criteria = getSession().createCriteria(getPersistentClass());
    criteria.add(Restrictions.eq("newsPublication", newsPublication));
    criteria.add(Restrictions.gt("listOrder", listOrder)).addOrder(Order.asc("listOrder")).setMaxResults(1);
    return (NewsHeading) criteria.uniqueResult();
  }

E ele funciona muito bem.

Então eu tentei fazer um JPA2 repositório camada.

Ele agora tem o seguinte JPQL método baseado em:

  @Query("SELECT nh FROM NewsHeading nh WHERE nh.newsPublication = :newsPublication AND nh.listOrder > :listOrder ORDER BY nh.listOrder ASC LIMIT 1")
  public NewsHeading findByNextListOrder(@Param("newsPublication") NewsPublication newsPublication, @Param("listOrder") int listOrder);

Mas ele não funciona.Porque o LIMITE cláusula não é válida.

Então eu me pergunto o que fazer.

Posso continuar a usar o método baseado em critérios acima neste JPA2 repositório camada ?

Eu gostaria de evitar confiante que o cliente ultrapassar o limite de valor e preferem código rígido que o valor de (1) em minha camada.

Também, que a instrução retorna apenas um objeto e, portanto, não há paginação necessário.

Qualquer dica seria muito bem-vinda.

Com Os Melhores Cumprimentos,

Stephane Eybert

Foi útil?

Solução

Você pode, provavelmente, esta com um PageRequest. http://docs.spring.io/spring-data/jpa/docs/1.6.2.RELEASE/reference/html/repositories.html#repositories.core-concepts

O Hibernate quer que você faça setMaxResults() no Query objeto, mas JPA não interface com isso diretamente.

Outra opção seria a utilização de um @NamedNativeQuery

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top