Hello,
I've a question selecting collections in a new map hql statement what doesn't work, in opposite to select a collection without the new map option.
I'm using
Hibernate 3.2.6 .
I've 2 simple classes:
<class name="xyz.RegisteredPerson"
table="registered_person" node="RegisteredPerson">
...
<list name="ContactDatas" cascade="all,delete-orphan"
embed-xml="true" node="ContactDatas">
<key column="registered_person_id" not-null="false" />
<list-index column="contact_data_idx" />
<one-to-many
class="xyz.ContactData" node="ContactData" />
</list>
...
</class>
<class name="xyz.ContactData"
table="contact_data" node=".">
<id name="id" column="contact_data_id" type="java.lang.Long"
unsaved-value="null" node="@id">
<generator class="sequence">
<param name="sequence">elefand_contact_data_seq</param>
</generator>
</id>
<property name="type" not-null="true" type="java.lang.String"
node="@type" />
<property name="value" not-null="true" type="java.lang.String"
node="@value" />
</class>
My HQL command is:
sf.getCurrentSession().createQuery("select new xyz.RegisteredPersonRow(r.ContactDatas) from RegisteredPerson r where r.id = something").list();:
Here my definition of the RegisteredPersonRow Object:
Code:
public class RegisteredPersonRow{
private List<ContactData> contactDatas;
public RegisteredPersonRow(List<ContactData> contactDatas) {
this.contactDatas = contactDatas;
}
public List<ContactData> getContactDatas() {
return contactDatas;
}
public void setContactDatas(List<ContactData> contactDatas) {
this.contactDatas = contactDatas;
}
}
I got following Stack:
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2216)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at aa.elefand.dao.RegisteredPersonDao.test(RegisteredPersonDao.java:642)
at aa.elefand.dao.RegisteredPersonDao$$FastClassByCGLIB$$a0411b2.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at aa.elefand.dao.RegisteredPersonDao$$EnhancerByCGLIB$$218fdb9.test(<generated>)
at aa.elefand.struts.admin.RegisteredPersonsAction.unspecified(RegisteredPersonsAction.java:59)
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:585)
at org.apache.struts.actions.ActionDispatcher.dispatchMethod(ActionDispatcher.java:362)
at org.apache.struts.actions.ActionDispatcher.dispatchMethod(ActionDispatcher.java:336)
at org.apache.struts.actions.ActionDispatcher.execute(ActionDispatcher.java:223)
at aa.elefand.struts.admin.RegisteredPersonsAction.execute(RegisteredPersonsAction.java:52)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at aa.elefand.common.SecurityFilter.doFilter(SecurityFilter.java:84)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.postgresql.util.PSQLException: FEHLER: Fehler »Syntaxfehler« bei ».«
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
I'm using
Postgresql 8.2.
The generated SQL Command is:
select . as col_0_0_ from registered_person registered0_ inner join contact_data contactdat1_ on registered0_.registered_person_id=contactdat1_.registered_person_id where registered0_.registered_person_id=2
what really don't work on the database
The Problem is, that no column is selected. I don't understand, why it's not possible to select a collection in a new map object.
Does anybody has an idea ? I found nothing in the documentation, that it is possible to select collections in a new map, but why should that not work ?