[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4496) Entity with composite-id and serial foreign-key one-to-many set mapping can't be saved under 3.3.x and under 3.2.x can be saved but can't fetch set to father object

Yi, Han (JIRA) noreply at atlassian.com
Fri Oct 16 09:26:41 EDT 2009


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

Yi, Han commented on HHH-4496:
------------------------------

I've known why under 3.2.5 the set is empty. it's because of the query under the same session context got the same ExtraInfo which had existed and without a not-empty set.
but in the other session, just query on the same condition, the new exception was thrown:

org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of net.vuniverse.db.ExtrainfoId.sn
        at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
        at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
        at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
        at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)
        at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
        at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:184)
        at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:104)
        at org.hibernate.engine.EntityKey.<init>(EntityKey.java:48)
        at org.hibernate.engine.StatefulPersistenceContext.getCollectionOwner(StatefulPersistenceContext.java:678)
        at org.hibernate.engine.loading.CollectionLoadContext.getLoadingCollection(CollectionLoadContext.java:107)
        at org.hibernate.loader.Loader.readCollectionElement(Loader.java:1003)
        at org.hibernate.loader.Loader.readCollectionElements(Loader.java:646)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:591)
        at org.hibernate.loader.Loader.doQuery(Loader.java:701)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        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)
        ......

> Entity with composite-id and serial foreign-key one-to-many set mapping can't be saved under 3.3.x and under 3.2.x can be saved but can't fetch set to father object 
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-4496
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4496
>             Project: Hibernate Core
>          Issue Type: Bug
>    Affects Versions: 3.2.5, 3.3.1, 3.3.2
>         Environment: jdk1.6.0_13
> windows 2003 server
> hibernate 3.2.5, 3.3.1, 3.3.2
> database: postgreSQL8.4
>            Reporter: Yi, Han
>
> Mapping:
>    <class name="ExtraInfo" table="extrainfo">
>     <composite-id class="ExtraInfoId" name="key">
>       <key-property column="sn" length="20" name="cid" type="string"/>
>       <key-property column="composite" length="2" name="composite" type="string"/>
>       <key-property column="fileName" length="300" name="fileName" type="string"/>
>     </composite-id>
>     <property name="id" generated="insert" insert="false" type="java.lang.Integer" unique="true" update="false">
>       <column name="id" not-null="true"/>
>     </property>
>     ...
>     <setinverse="true" name="scanDatas">
>       <key property-ref="id">
>         <column name="id"/>
>       </key>
>       <one-to-many class="ScanData"/>
>     </set>
>   </class>
>   <class name="ScanData" table="scandata">
>     <composite-id class="net.vuniverse.app.biochemanalysis.db.model.ScanDataId" name="key">
>       <key-property column="id" name="id" type="java.lang.Integer"/>
>       <key-property column="idx" name="idx" type="java.lang.Integer"/>
>     </composite-id>
>     <many-to-one fetch="join" insert="false" name="extraInfo" property-ref="id" update="false">
>       <column name="id"/>
>     </many-to-one>
>     <property name="data" type="java.lang.Float">
>       <column name="data" precision="8" scale="8"/>
>     </property>
>   </class>
> Code:
> ExtraInfoId eid = new ExtraInfoId("a", "1", "aa.txt");
> ExtraInfo extra = new ExtraInfo(eid);
> session.save(extra);
> session.flush();
> int id = extra.getId();
> for (int i = 0; i < 3; i++) {
>     ScanData sd = new ScanData(new ScanDataId(id, 1));
>     sd.setData(0.5f * (i + 1));
>     session.save(sd);
> }
> session.flush();
> extra = session.createQuery("from ExtraInfo a left join fetch a.scandatas b where a.id='" + id + "'").list().get(0);
> Set<ScanData> scandatas = extra.getScanDatas();
> for (ScanData sd : scandatas) {
>     System.out.println(sd.getData());
> }
> under all version, mapping can be varified correctly.
> under version 3.2.5, new ExtraInfo can be saved. but the query with "left join fetch" can't return a Extra with set full of ScanData. the size of scandatas is 0.
> under version 3.3.x, new ExtraInfo can't be saved. and the following exception is thrown:
> java.lang.ClassCastException: java.lang.Integer
>         at org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:400)
>          at org.hibernate.pretty.MessageHelper.collectionInfoString(MessageHelper.java:307)
>          at org.hibernate.engine.Collections.processReachableCollection(Collections.java:199)
>          at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:60)
>          at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)
>          at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:84)
>          at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)
>          at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:161)
>          at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
>          at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
>          at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
>          at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
> .........

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