Ich habe eine Datenbank, wo ich eine Abfrage erfolgreich in SQL gemacht habe, aber die Sache ist, dass ich diese Abfrage in JPQL für eine Methode eines REST-Dienstes schreiben muss.Wie übersetzt man arithmetischen Ausdruck von SQL nach JPQL?
Dies ist die Abfrage, die gearbeitet:
SELECT * FROM user u WHERE SQRT(POW(69.1 * (u.latitude - 38.0),2) + POW(69.1 * (-2.8 - u.longitude) * COS(u.latitude/57.3), 2)) < 100
Ich brauche die Werte dort als „38.0“ geschrieben zu ändern und „-2,8“ und „100“, um Eingabeparameter und es in JPQL zu machen.
Dies ist, was ich
@GET
@Path("nearusers={lat}&{lon}&{dist}")
@Produces({MediaType.APPLICATION_JSON})
public List<Usuario> findNearUsers(@PathParam("lat") BigDecimal lat,@PathParam("lon") BigDecimal lon, @PathParam("dist") BigDecimal dist){
TypedQuery query = getEntityManager().createQuery("SELECT u FROM User u WHERE SQRT(POW(69.1 * (u.latitude - :lat),2) + POW(69.1 * (:lon - u.longitude) * COS(u.latitude/57.3), 2)) < :dist",Usuario.class);
List<User> users = query
.setParameter("lat", lat)
.setParameter("lon", lon)
.setParameter("dist", dist)
.getResultList();
return users;
}
versucht Und wenn ich diesen Service Methode starten, was von meinem Server Ich bin immer ein Fehler, der sagt:
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [SELECT u FROM Usuario u WHERE SQRT(POW(69.1 * (u.latitud - :lat),2) + POW(69.1 * (:lon - u.longitud) * COS(u.latitud/57.3), 2)) < :dist].
[35, 129] The encapsulated expression is not a valid expression
Die IDE (Netbeans) ist einige Warnungen in der Zeile, die die Abfrage bilden: IDE warnings
Ich habe versucht, den Ausdruck mehrmals zu ändern, Klammern, Casting-Parameter hinzufügen zu verdoppeln, aber nichts hat funktioniert.
Es hat funktioniert, vielen Dank !!! –
Gut zu hören. Fühlen Sie sich frei, meine Antwort als akzeptiert zu markieren :) –
Ich markierte sofort, wenn ich geccked, dass funktionierte aber stackoverlows sagt, dass ich nicht genug Ruf als richtig zu markieren, weil ich ein neuer Benutzer bin, und dass sie nur meine Stimme aufzeichnen können, aber nicht zeigen . Entschuldigung für diesen Kumpel. Trotzdem danke nochmal für die Hilfe! Edit: Sorry war ein Fehler, die Sache war, dass ich versuchte, anstelle der Marke als angenommen zu stimmen, sorry dafür, dass es mein erster Beitrag war. –