Spring Data JPA: Comment peut-Requête en retour des Non - Entités d'Objets ou d'une Liste d'Objets?
Je suis à l'aide de spring data JPA dans mon projet. Je suis à jouer avec des millions d'enregistrements. J'ai une exigence où je dois récupérer les données pour les différents tableaux et de construire un objet, puis de le peindre sur une INTERFACE utilisateur. Maintenant comment réaliser ce mon de Printemps, Référentiels de données. J'ai lu que cela peut être réalisé par des indigènes des requêtes.
Si le nom indigène de la requête ne renvoie pas à une entité ou une liste de
entités, nous pouvons tracer le résultat de la requête à un type de renvoi correct par
à l'aide de @SqlResultSetMapping annotation.
Mais quand j'essaie d'utiliser @SqlResultSetMapping
c'est une autre entityResult. Dire ce que je comprends, c'est que c'est juste de la transformation de certains du résultat de la requête de l'entité résultat défini uniquement, mais je veux un résultat de non - entités objets.
@SqlResultSetMapping(
name="studentPercentile",
entities={
@EntityResult(
entityClass=CustomStudent.class,
fields={
@FieldResult(name="id", column="ID"),
@FieldResult(name="firstName", column="FIRST_NAME"),
@FieldResult(name="lastName", column="LAST_NAME")
}
)
}
)
@NamedNativeQuery(
name="findStudentPercentile",
query="SELECT * FROM STUDENT",
resultSetMapping="studentPercentile")
Dans l'exemple ci-dessus, je suis juste essayer d'obtenir les résultats de l'étudiant de l'Entité dans une autre pojo 'CustomStudent " qui n'est pas une entité. (Cet exemple, je suis en train d'exécuter juste pour POC objet, réel de cas d'utilisation est beaucoup plus compliqué, avec compliqué requête qui renvoie les différents resultset).
Comment atteindre au-dessus de cas d'utilisation? Est-il un autre moyen en plus de l'utilisation de requête de nom que mon dépôt de la méthode de retour des Non - Entités objets?
- Je suis tombé sur le même problème récemment et content de voir que quelqu'un a posté et j'ai obtenu une solution pour ça aussi!
- Nous avons eu un problème similaire à portée de main où nous étions censés récupérer le nombre d'enregistrements à partir de trois tables et nous nous sommes retrouvés à l'aide de printemps JdbcTemplate (même si en général nous sommes à l'aide de Spring JPA Hibernate dans notre projet). Il semble trop de travail pour écrire des entités etc. tout simplement pour récupérer le nombre d'enregistrements.
Vous devez vous connecter pour publier un commentaire.
J'ai été très surpris quand je suis tombé sur ce pour la première fois, mais, oui, vous pouvez mapper les résultats de la requête à l'aide de @SqlResultSetMapping seulement pour les scalaires et des entités gérées.
Le meilleur que vous pouvez faire, je suppose, est de passer le mappage automatique. De la requête, sans cartographie retour
List<Object[]>
et vous pouvez mapper la façon dont vous avez besoin.Une autre approche serait d'utiliser @MappedSuperclass. La classe dénotée comme @MappedSuperclass (CustomStudent dans votre cas) peut être (pas sûr à 100%, tout de même) utilisé dans @SqlResultSetMapping. mais il faut introduire de hiérarchie d'héritage, c'est-à votre Étudiant de l'entité doit s'étendre CustomStudent. Que serait sucer la plupart du temps à partir de la bonne OO design, parce que l'héritage serait un peu artificielle...
Vous pouvez faire quelque chose comme
Puis le MyDto objet serait juste besoin d'un constructeur défini avec les champs corrects c'est à dire
SELECT new path.to.dto.MyDto(e.id, new path.to.dto.OtherDto)
Validation failed for query for method public abstract..
Comment sur JPA 2.1 ConstructorResult ?