L'Union de Tous et de la Somme avec JPA CriteriaBuilder
Je suis en train de convertir un natif de la requête SQL à utiliser les Critères de l'API JPA 2.0. J'ai trouvé beaucoup de Critères API exemples sur Google, mais je vais avoir bien du mal à mettre tous les morceaux ensemble. J'espère qu'une personne plus expérimentée sera en mesure de m'aider. Le natif de la requête ressemble à ceci:
select
sum(amount) from firstTable, secondTable
where firstTable.id = secondTable.id
and amount <> 0
and firstTable.id = ?
union all
select
sum(amount) from firstTable, thirdTable
where firstTable.id = thirdTable.id
and amount <> 0
and firstTable.id = ?
L'original de l'ensemble de résultats de requête était de retour d'une Liste de BigDecimal objets.
Merci!
J'ai eu le même problème à résoudre, avec ce que je pouvais faire de l'union stackoverflow.com/a/55302501/5486945
OriginalL'auteur user1148956 | 2012-02-01
Vous devez vous connecter pour publier un commentaire.
JPA n'a pas le soutien de l'UNION, soit utiliser un natif SQL de la requête, ou à exécuter deux requêtes.
EclipseLink prend en charge UNION wiki.eclipse.org/EclipseLink/UserGuide/JPA/...
OriginalL'auteur James
Désolé l'exemple ci-dessous n'est pas de l'union, c'est plutôt une jointure.
Je considère à l'aide d'une requête avec plusieurs racines.
Voici un extrait du Hiberante guide du développeur, le code est JPA 2.0-compatible.
Critères de requêtes peut définir de multiples causes, dont l'effet est de créer un produit cartésien entre le nouvellement ajouté racine et les autres. Voici un exemple correspondant à tous les hommes et toutes les femmes célibataires:
@user613114: je n'ai pas utilisé l'ORM et Java pour plusieurs années, mais je vais essayer de répondre. L'exemple ci-dessus va vous donner toutes les combinaisons possibles de l'homme seul et unique femme. La requête SQL va ressembler à: sélectionner un.nom de b.nom de PERSONNES, les PERSONNES b où un.sexe = "masculin" et de la b.sexe = 'femme' et un.statut = unique et b.statut = unique
OriginalL'auteur Alex
Si vous avez besoin d'Union, les deux entités sont candidats à l'héritage dans mon esprit.
OriginalL'auteur Marcin Cinik
Que Marcin observé qu'il est possible de l'héritage, au moins dans des cas particuliers.
Si vous pouvez faire interrogée entités hériter l'un de l'autre à l'aide TABLE_PER_CLASS stratégie d'héritage (fourni en option, peut-être en veille prolongée, mais il y a des limites - vous ne pouvez pas utiliser l'IDENTITÉ et de l'AUTOMOBILE) et si le champ est présent dans la requête ayant le même nom dans les deux entités, alors vous pouvez unir les deux entités en interrogeant les parents.
Par exemple, si l'entité de la classe de l'Enfant s'étend à partir de l'entité de la classe Parent à la fois avoir le champ "nom", la requête serait :
sélectionnez p.nom du Parent p
Pour sélectionner uniquement les noms des Parents des entités ajouter une condition de TYPE.
sélectionnez p.nom du Parent p ou de TYPE(p) = Parent
Si la modification des entités d'hériter l'un de l'autre est inapproprié, vous pouvez créer des particuliers (avec l'héritage, de la cause) pour cette requête, car il est possible de créer plusieurs entités à la même table. Mais il est probable que vous ne trouverez pas que des efforts raisonnables.
OriginalL'auteur Alex