[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5348) java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return with AbstractEntityManager.createQuery(String jpaqlString, Class<T> resultClass) on View object

Anwar Rizal (JIRA) noreply at atlassian.com
Thu Jul 15 17:39:16 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=37810#action_37810 ] 

Anwar Rizal commented on HHH-5348:
----------------------------------

The following code (with ItemNameDescription.java in the attachment) uncovers the problem:

public void testSelectProjectiveQuery() {

		Item item = new Item( "ItemName", "ItemDescription" );

		EntityManager em = getOrCreateEntityManager();
		em.getTransaction().begin();
		em.persist(item);
		em.getTransaction().commit();
		TypedQuery<ItemNameDescription> q = em.createQuery(
			"SELECT new org.hibernate.ejb.test.ItemNameDescription(it.name, it.descr) FROM Item it",
			ItemNameDescription.class);
		List<ItemNameDescription> result = q.getResultList();
		assertEquals(1, result.size());
		assertEquals("ItemName", result.get(0).getName());
		assertEquals("ItemDescription", result.get(0).getDescr());
		
		
		em.close();
		
	}

The exception is thrown in AbstractEntityManagerImpl class:
	org.hibernate.Query hqlQuery = getSession().createQuery( jpaqlString );
	if ( hqlQuery.getReturnTypes().length != 1 ) {
	   throw new IllegalArgumentException( "Cannot create TypedQuery for query with more than one return" );
	}

hqlQuery.getReturnTypes() return array of string instead of ItemNameDescription. After debugging a little bit, I think the problem is on HQLQueryPlan class that does not build the return type correctly.

Best regards,
Anwar.
		


> java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return with AbstractEntityManager.createQuery(String jpaqlString, Class<T> resultClass) on View object
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-5348
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5348
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: entity-manager
>    Affects Versions: 3.5.3
>            Reporter: nodje
>         Attachments: ItemNameDescription.java
>
>
> I'm getting a
> java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return
> with a query that returns a View object.
> AbstractEntityManager:279, detects as many returns type as there is parameters in the View object, instead of one single result type, the View Object itself.
> QueryString example that fails with public <T> TypedQuery<T> createQuery(String jpaqlString, Class<T> resultClass):
> "select new WorkContractDto(wc.workContractStartDate, wc.workContractEndDate, wc.workContractEmployeeLastName, wc.workContractSendingStatus) from WorkContract wc where wc.workContractEmployeeLastName = ?1"

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list