Spring data jpa, jparepository Rücksendung Liste von string anstelle von DTO-Objekt
Ich habe eine interface
Umsetzung JPARepository
und haben drei Methoden, eine davon ist eine benutzerdefinierte @Query
.
public interface PersonRepository extends JpaRepository<Person, Long> {
List<Person> getPersonBycountryCode(String countryCode);
List<Person> findByCountryCodeAndCity(String string,String city);
@Query(value = "SELECT person.firstName as firstName, person.lastName as lastName, person.countryCode as country, person.city as city,"
+ " SQRT(POWER((69.1 * (person.age - :age )) , 2 )"
+ " + POWER((53 * (person.experience - :experience )), 2)) as eligibility"
+ " FROM Person person"
+ " ORDER BY eligibility ASC")
List<PersonDetailsDto> findPersonDetailsByEligibility(
@Param("age") BigDecimal age,
@Param("experience") BigDecimal experience,
Pageable pageable
);
}
Problem ist: Methode mit @Query
nicht zurückgeben der Liste der PersonDetailsDto
aber zurückgeben der Liste der Liste der strings (List<List<String>>
).
PersonDetailsDto
ist ein POJO-Klasse mit allen Variablen beschrieben, die in einer Abfrage-Ausgabe (Vorname, Nachname, Land, Stadt -, Zulassungs -) und auch ein Konstruktor mit allen Variablen als Parameter. Zwei andere Methoden zurück Liste von Person-Objekt.
Irgendeine Idee?
- Zunächst einige, die syntax ist ungültig JPQL (POWER, SQRT). Zweitens haben Sie nicht angegeben Ergebnis Klasse für die Abfrage ein (oder benutzte "NEUE PersonDetailsDto(...)" in der JPQL).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich
JpaRepository<Person, Long>
bedeutet, dass können nur mit der Person als Ihre dto in jpa-repository-Methoden.Für Ihre Lösung können Sie einfach definieren Sie Ihre dto Schnittstelle in das repository :
Wenn ich mich nicht Irre die Idee hinter dem PPV nicht auf der Suche nach spezifischen Feldern ist, die Kosten (Effizienz wise) das gleiche zu bringen, eine Spalte oder alle Spalten einer Zeile der Tabelle.Aber um Ihr problem zu lösen Sie können
nativeQuery = true
im@Query
annotation aus einer Repository-Klasse wie folgt aus:Ich hoffe, dies wird Ihnen helfen, um Ihr problem zu lösen.
Verwenden Sie new-Schlüsselwort in der Abfrage der @Abfrage. Und stellen Sie sicher, dass der geeignete Konstruktor für PersonDetailsDto und auch change package name.
Ähnliche Frage Antwort.
nur nennen es durch seinen alias, es funktionierte für mich so an, dass
ex :