Specifica di una clausola limite in una dichiarazione di repository JPA2 @Query

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

  •  21-12-2019
  •  | 
  •  

Domanda

Ho la seguente dichiarazione MySQL:

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

Ho iniziato sul percorso di gestione dei dati facendo prima un strato DAO Ibernate.

Aveva il seguente metodo basato sui criteri:

  @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 funziona bene.

Poi ho provato a fare un livello di repository JPA2.

Ora ha il seguente metodo basato su JPQL:

  @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);
.

Ma non funziona.Poiché la clausola limite non è valida.

Quindi mi chiedo cosa fare.

Posso ancora utilizzare il metodo basato su criteri di cui sopra in questo livello di repository JPA2?

Vorrei evitare di fidarmi del client per passare il valore limite e preferire il codice rigido tale valore (di 1) nel mio livello.

Inoltre, questa affermazione restituisce un solo oggetto e quindi non c'è nessuna paginazione necessaria.

Qualsiasi suggerimento sarebbe il più accolto.

Cordiali saluti,

Stephane Eybert

È stato utile?

Soluzione

Puoi probabilmente questo con un PageRequest. http://docs.spring.io/spring-data/jpa/docs/1.6.2.release/reference/html/repositorys.html#repository.core-concepts

Ibernazione vuole che tu faccia setMaxResults() sull'oggetto Query, ma JPA non si interfaccia con questo direttamente.

L'altra opzione sarebbe quella di utilizzare un @NamedNativeQuery

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top