J'ai une classe A
qui a une autre classe B
à l'intérieur. Quelque chose comme ceci:Optimiser une requête en hibernation avec des critères (éviter les jointures inutiles)
@Table(name = "A")
Class A {
@OneToOne
@JoinColumn(name="B_ID")
B b;
}
Je veux avoir une requête comme ceci:
SELECT * from A where B_ID = 4
Mais quand j'utilise Criteria
pour atteindre mon objectif, il des jointures internes les deux tables. Comment puis-je avoir un SELECT
comme je l'ai dit.
Si elle aide, j'ai mes critères comme celui-ci:
DetachedCriteria crit = DetachedCriteria(A.class, "a");
crit.createAlias("a.b", "b");
crit.add(Restrictions.eq("b.id", 4));
getHibernateTemplate().findByCriteria(crit);
Donc vous dites que si je fais la relation 'LAZY', le problème sera résolu? –
Je serais très surpris si cela ne résout pas le problème. Hibernate devrait être assez intelligent pour savoir que vous ne voulez pas charger l'objet B et que vous vous souciez uniquement de l'ID qui est stocké sur l'objet de support de la table A. – StuPointerException
** Ceci n'est donc PAS LA RÉPONSE **. J'ai mis la relation à 'LAZY' mais, tant qu'il y a un' createAlias', il y a un 'inner-join'. –