[hibernate-issues] [Hibernate-JIRA] Commented: (ANN-660) HHH-2545 Alive

Jacek Halat (JIRA) noreply at atlassian.com
Mon Sep 10 08:42:14 EDT 2007


    [ http://opensource.atlassian.com/projects/hibernate/browse/ANN-660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_28049 ] 

Jacek Halat commented on ANN-660:
---------------------------------

Source of problem is in code:

StandardQueryCache.put method
(...)
			List cacheable = new ArrayList( result.size()+1 );
			cacheable.add( ts );
			for ( int i=0; i<result.size(); i++ ) {
				if ( returnTypes.length==1 ) {
					cacheable.add( returnTypes[0].disassemble( result.get(i), session, null ) );
				}
				else {
					cacheable.add( TypeFactory.disassemble( (Object[]) result.get(i), returnTypes, null, session, null ) );
				}
			}
(...)
Most important line is
cacheable.add( returnTypes[0].disassemble( result.get(i), session, null ) );

JavaDoc from Type.disassemble says:


	/**
	 * Return a cacheable "disassembled" representation of the object.
	 * @param value the value to cache
	 * @param session the session
	 * @param owner optional parent entity object (needed for collections)
	 * @return the disassembled, deep cloned state
	 */
	public Serializable disassemble(Object value, SessionImplementor session, Object owner) throws HibernateException;

so third parameter (owner) is not needed for non-collections, but for collections this is needed parameter!! And in actual code this parameter is always null.....

If we run i.e. this query: [select s from SubItem s] Result contains exactly this same objects (Subitem), but return type is ManyToOneType. (and this works correctly). So now is a question: If ManyToOneType return type works correctly, how should work BagType? There are 2 possibilities:
a) There is wrong return type provided to put method
b) For BagType owner should be extracted


> HHH-2545 Alive
> --------------
>
>                 Key: ANN-660
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-660
>             Project: Hibernate Annotations
>          Issue Type: Bug
>    Affects Versions: 3.3.0.ga
>         Environment: Gentoo Linux x86
> JDK: 1.6. SUN and BEA
> JBoss-4.2.1.GA
> Hibernate: 3.2.5
> Annotation: 3.3.0.GA
> EntityManager: 3.3.1
>            Reporter: Eugene Batogov
>            Priority: Critical
>         Attachments: testcase_ANN-660.zip
>
>   Original Estimate: 1 hour
>  Remaining Estimate: 1 hour
>
> I have a same problem how  in HHH-2545 bug !
> I update Hibernate to 3.2.5, hibernate-annotation to 3.3.0.GA
> hibernate-entitymanager to 3.3.1.GA.
> But this bug alive!
> I use ehcache-1.3.0. jBoss-4.2.1.GA.
> My query, which get from cache with null elements in collections:
> Long customerAccount = customerIdentity.getCustomerAccount().getId();
>         try{
>                 String sql = "select npvr.npvrChannels from NpvrServiceSpec npvr"+
>                 " where npvr.id in ("+
>                 " select ss.id from Customer cust join cust.accounts acc join 
> cust.subscriptions sub"+
>                 " join sub.serviceSpecifications ss"+
>                 " where acc.id =:customerAccount and"+
>                 " ss in (from NpvrServiceSpec))";
>                 Query query = emanager.createQuery(sql);
>                 query.setParameter("customerAccount", customerAccount);
>                 
> query.setHint("org.hibernate.cacheRegion", "query.findQueryNpvrChannelsBySubsription");
>                 query.setHint("org.hibernate.cacheable", true);
>                 result =  query.getResultList();
>                 
> Help me, please !
> Thanks in advance.

-- 
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