title: Hibernate many-to-many data retrieval, via query
body: <p>Please help me, I think there is something that I am not doing correct.
  I have <code>User</code> and <code>Contact</code>, that are in <code>Many-to-Many</code> relation.</p>
  
  <p>User.java:</p>
  
  <pre><code>public class User {
  
      private Integer userID;
  
      private String userLoginEmail;
  
      private Set&lt;Contact&gt; contactSet = new HashSet&lt;Contact&gt;();
  
      public User() {
  
      }
  
      .
      getters and setters
      .
  </code></pre>
  
  <p>Contact.java</p>
  
  <pre><code>public class Contact implements Serializable {
      private Integer contactID;
      private Set&lt;User&gt; userSet= new HashSet&lt;User&gt;();
      public Contact() {
      }
      .
      getters and setters
      .
      .
  </code></pre>
  
  <p>Mapping for User:</p>
  
  <pre><code>&lt;hibernate-mapping package="com.smallworks.model" schema="projectdb"&gt;
   &lt;class name="User" table="USERACCOUNT"&gt;
    &lt;id column="USER_ID" length="500" name="userID"&gt;
     &lt;generator class="increment"/&gt;
    &lt;/id&gt;
    &lt;set cascade="all" fetch="select" lazy="true" name="contactSet"
     sort="unsorted" table="USER_CONTACT"&gt;
     &lt;key column="USER_ID"/&gt;
     &lt;many-to-many class="com.smallworks.model.Contact"
      column="CONTACT_ID" order-by="CONTACT_ID" unique="false"/&gt;
    &lt;/set&gt;
    &lt;/class&gt;
  &lt;/hibernate-mapping&gt;
  </code></pre>
  
  <p>Mapping for Contact:</p>
  
  <pre><code>&lt;hibernate-mapping package="com.smallworks.model" schema="projectdb"&gt;
   &lt;class name="Contact" table="CONTACT"&gt;
    &lt;id column="CONTACT_ID" length="500" name="contactID"&gt;
     &lt;generator class="increment"/&gt;
    &lt;/id&gt;
    &lt;!-- many to many mapping with the User via User_Contact table --&gt;
    &lt;set inverse="true" lazy="false" name="userSet" sort="unsorted" table="USER_CONTACT"&gt;
      &lt;key column="USER_ID"/&gt;
      &lt;many-to-many class="com.smallworks.model.Contact" column="CONTACT_ID" unique="false"/&gt;
    &lt;/set&gt;
   &lt;/class&gt;
  &lt;/hibernate-mapping&gt;
  </code></pre>
  
  <p>I am trying to write a query to get the <code>Contacts</code> associated with the <code>User</code> that is logged in.</p>
  
  <p>When I try to write the following query:</p>
  
  <pre><code>Query query=session.createQuery("select contact from com.src.model.Contact  contact join contact.userSet u where u.userID=:userID");
          query.setParameter("userID", user.getUserID());
          contactList=query.list();
  </code></pre>
  
  <p>I get the following error:</p>
  
  <pre><code>org.hibernate.QueryException: could not resolve property: userID of: com.src.model.Contact [select contact from com.src.model.Contact  contact join contact.userSet u where u.userID=:userID]
  </code></pre>
  
  <p>I know what the error message means, but I am not being able to figure out how to write this query.</p>
  
  <p>First I did like this: <a href="https://stackoverflow.com/questions/15868868/hibernate-many-to-many-data-retrieval">Hibernate many-to-many data retrieval</a></p>
  
  <p>but now I am writing a query because I need to check on the <code>Contact</code> status, and other parameters.</p>
  
  <p>Thanks
  Harbir</p>
  
  <p>This is how I am calling the query:</p>
  
  <pre><code>@Override
      public List&lt;Contact&gt; getContactList(User user) {
          log.info("getContactList(User user)");
          List contactList = new ArrayList();
          Session session = sessionFactory.getCurrentSession();
          System.out.println("About to hit the query");
          Query query=session.createQuery("select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID");
          query.setParameter("userID", user.getUserID());
          contactList=query.list();
          return contactList;
      }
  </code></pre>
  
  <p>The following is the stack trace:</p>
  
  <pre><code>About to hit the query
  18:56:01.011 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.QueryTranslatorImpl - parse() - HQL: select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID
  18:56:01.020 [http-bio-8080-exec-6] DEBUG org.hibernate.hql.ast.AST - --- HQL AST ---
   \-[QUERY] 'query'
      +-[SELECT_FROM] 'SELECT_FROM'
      |  +-[FROM] 'from'
      |  |  +-[RANGE] 'RANGE'
      |  |  |  +-[DOT] '.'
      |  |  |  |  +-[DOT] '.'
      |  |  |  |  |  +-[DOT] '.'
      |  |  |  |  |  |  +-[IDENT] 'com'
      |  |  |  |  |  |  \-[IDENT] 'smallworks'
      |  |  |  |  |  \-[IDENT] 'model'
      |  |  |  |  \-[IDENT] 'Contact'
      |  |  |  \-[ALIAS] 'contact'
      |  |  \-[JOIN] 'join'
      |  |     +-[DOT] '.'
      |  |     |  +-[IDENT] 'contact'
      |  |     |  \-[IDENT] 'userSet'
      |  |     \-[ALIAS] 'u'
      |  \-[SELECT] 'select'
      |     \-[IDENT] 'contact'
      \-[WHERE] 'where'
         \-[EQ] '='
            +-[DOT] '.'
            |  +-[IDENT] 'u'
            |  \-[IDENT] 'userID'
            \-[COLON] ':'
               \-[IDENT] 'userID'
  
  18:56:01.020 [http-bio-8080-exec-6] DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors
  18:56:01.041 [http-bio-8080-exec-6] DEBUG o.h.hql.antlr.HqlSqlBaseWalker - select &lt;&lt; begin [level=1, statement=select]
  18:56:01.050 [http-bio-8080-exec-6] DEBUG o.hibernate.hql.ast.tree.FromElement - FromClause{level=1} :  com.smallworks.model.Contact (contact) -&gt; contact0_
  18:56:01.051 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved :  contact -&gt; contact0_.CONTACT_ID
  18:56:01.053 [http-bio-8080-exec-6] DEBUG org.hibernate.hql.ast.tree.DotNode - getDataType() : userSet -&gt; org.hibernate.type.SetType(com.smallworks.model.Contact.userSet)
  18:56:01.053 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.tree.FromElementFactory - createManyToMany() : path = contact.userSet role = com.smallworks.model.Contact.userSet associatedEntityName = com.smallworks.model.Contact
  18:56:01.055 [http-bio-8080-exec-6] DEBUG o.hibernate.hql.ast.tree.FromElement - FromClause{level=1} :  com.smallworks.model.Contact (u) -&gt; contact2_
  18:56:01.055 [http-bio-8080-exec-6] DEBUG o.hibernate.hql.ast.tree.FromClause - addJoinByPathMap() : contact.userSet -&gt; smallworksdb.CONTACT contact2_
  18:56:01.055 [http-bio-8080-exec-6] DEBUG org.hibernate.hql.ast.tree.DotNode - dereferenceCollection() : Created new FROM element for contact.userSet : smallworksdb.USER_CONTACT contact2_
  18:56:01.055 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved :  contact.userSet -&gt; .
  18:56:01.056 [http-bio-8080-exec-6] DEBUG org.hibernate.hql.ast.HqlSqlWalker - createFromJoinElement() : -- join tree --
   \-[JOIN_FRAGMENT] FromElement: 'smallworksdb.USER_CONTACT contact2_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=u,role=com.smallworks.model.Contact.userSet,tableName=smallworksdb.CONTACT,tableAlias=contact2_,origin=smallworksdb.CONTACT contact0_,colums={contact0_.CONTACT_ID ,className=com.smallworks.model.Contact}}
  
  18:56:01.056 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved :  contact -&gt; contact0_.CONTACT_ID
  18:56:01.060 [http-bio-8080-exec-6] DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved :  u -&gt; contact2_.CONTACT_ID
  18:56:01.060 [http-bio-8080-exec-6] DEBUG o.s.w.s.m.a.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [com.smallworks.controller.ProjectController@1f183871]: org.hibernate.QueryException: could not resolve property: userID of: com.smallworks.model.Contact [select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID]
  18:56:01.062 [http-bio-8080-exec-6] DEBUG o.s.w.s.m.a.ResponseStatusExceptionResolver - Resolving exception from handler [com.smallworks.controller.ProjectController@1f183871]: org.hibernate.QueryException: could not resolve property: userID of: com.smallworks.model.Contact [select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID]
  18:56:01.062 [http-bio-8080-exec-6] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolving exception from handler [com.smallworks.controller.ProjectController@1f183871]: org.hibernate.QueryException: could not resolve property: userID of: com.smallworks.model.Contact [select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID]
  18:56:01.069 [http-bio-8080-exec-6] DEBUG o.s.web.servlet.DispatcherServlet - Could not complete request
  org.hibernate.QueryException: could not resolve property: userID of: com.smallworks.model.Contact [select contact from com.smallworks.model.Contact  contact join contact.userSet u where u.userID=:userID]
      at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:61) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1385) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.persister.collection.AbstractCollectionPersister.toType(AbstractCollectionPersister.java:1457) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:302) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:407) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:589) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:264) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:211) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:750) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1216) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3525) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(HQLQueryPlan.java:101) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(HQLQueryPlan.java:80) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
      at com.smallworks.dao.impl.ContactDAOImpl.getContactList(ContactDAOImpl.java:92) [ContactDAOImpl.class:na]
      at com.smallworks.service.impl.ContactServiceImpl.getContactList(ContactServiceImpl.java:95) [ContactServiceImpl.class:na]
      at com.smallworks.controller.ProjectController.addContact(ProjectController.java:117) [ProjectController.class:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [na:1.6.0_33]
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [na:1.6.0_33]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [na:1.6.0_33]
      at java.lang.reflect.Method.invoke(Unknown Source) [na:1.6.0_33]
      at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) [servlet-api.jar:na]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) [servlet-api.jar:na]
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.33]
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.33]
      at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) [spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.33]
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.33]
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [catalina.jar:7.0.33]
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) [catalina.jar:7.0.33]
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [catalina.jar:7.0.33]
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [catalina.jar:7.0.33]
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) [catalina.jar:7.0.33]
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931) [catalina.jar:7.0.33]
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.33]
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) [catalina.jar:7.0.33]
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) [tomcat-coyote.jar:7.0.33]
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) [tomcat-coyote.jar:7.0.33]
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) [tomcat-coyote.jar:7.0.33]
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [na:1.6.0_33]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.6.0_33]
      at java.lang.Thread.run(Unknown Source) [na:1.6.0_33]
  18:56:01.069 [http-bio-8080-exec-6] DEBUG o.s.o.h.s.OpenSessionInViewFilter - Closing single Hibernate Session in OpenSessionInViewFilter
  18:56:01.069 [http-bio-8080-exec-6] DEBUG o.s.o.hibernate3.SessionFactoryUtils - Closing Hibernate Session
  </code></pre>