4 votes

Les propriétés calculées dans Hibernate et les requêtes SQL

J'ai implémenté une propriété calculée dans ma configuration qui fonctionne bien si j'utilise uniquement HQL. Malheureusement, il y a des endroits où des requêtes SQL sont exécutées que je ne peux pas intégrer dans HQL. Est-ce que je fais face à un bug ou est-ce que je fais juste quelque chose de mal?

(SELECT DISTINCT p.CUSTOMER FROM P.P03 p WHERE p.COUNTRY = land)

Quand une requête SQL est exécutée, elle se fait de cette manière :

session.createSQLQuery(queryString).addEntity(P11.class).list()

Je reçois une NullPointerException.

java.lang.NullPointerException
at org.hibernate.loader.DefaultEntityAliases.intern(DefaultEntityAliases.java:157)
at org.hibernate.loader.DefaultEntityAliases.getSuffixedPropertyAliases(DefaultEntityAliases.java:130)
at org.hibernate.loader.DefaultEntityAliases.(DefaultEntityAliases.java:76) at org.hibernate.loader.ColumnEntityAliases.(ColumnEntityAliases.java:40) at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.generateCustomReturns(SQLQueryReturnProcessor.java:197) at org.hibernate.loader.custom.sql.SQLCustomQuery.(SQLCustomQuery.java:152) at org.hibernate.engine.query.NativeSQLQueryPlan.(NativeSQLQueryPlan.java:67) at org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:136) at org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:160) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175) at de.acocon.mis.dao.AmpelDaoImpl.getAmpelOMK(AmpelDaoImpl.java:134) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307

4voto

Aaron Digulla Points 143830

Vous devez copier la formule dans votre requête SQL native. Hibernate ne tente pas de manipuler ou de comprendre le SQL natif, lorsque vous l'utilisez, vous êtes seul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X