[hibernate-issues] [Hibernate-JIRA] Commented: (ANN-758) map key type no longer inferred correctly, throws exception at runtime

David Mansfield (JIRA) noreply at atlassian.com
Mon Aug 25 09:50:27 EDT 2008


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

David Mansfield commented on ANN-758:
-------------------------------------

is there any way to get feedback on this issue. it should be trivial to fix, it's an obvious bug introduced in a stable release, and now another stable release has gone out the door. is there anything I can do?

> map key type no longer inferred correctly, throws exception at runtime
> ----------------------------------------------------------------------
>
>                 Key: ANN-758
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-758
>             Project: Hibernate Annotations
>          Issue Type: Bug
>          Components: binder
>    Affects Versions: 3.3.1.GA
>         Environment: hib. 3.2, annotaions 3.3.1GA, em 3.3.1GA, oracle 10r2, tomcat 5.5, linux, spring 2.0
>            Reporter: David Mansfield
>         Attachments: hib-anno-set-map-key-type.patch
>
>   Original Estimate: 15 minutes
>  Remaining Estimate: 15 minutes
>
> after upgrading from annotations 3.3.0GA to 3.3.1GA, my mapped collection (ManyToMany) is broken.  i've identified the commit that broke it:
> http://fisheye.jboss.com/browse/Hibernate/annotations/trunk/src/java/org/hibernate/cfg/annotations/MapBinder.java?r1=12963&r2=14425
> The issue is that unless the type is given now expliticly in the @MapKey's @Type, the code now assumes a 'Serializable' type, and attempts to deserialize an object stream from the database column value.  the exact exception is:
> java.io.StreamCorruptedException: invalid stream header
> 	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
> 	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
> 	at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:252)
> 	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:209)
> 	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
> 	at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:82)
> 	at org.hibernate.type.SerializableType.get(SerializableType.java:39)
> 	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
> ...
> The fix is simple: if @Type is NOT given in the @MapKey annotation, keep the old behavior which at least tries to set the type, even if it may not work in all situations.  The attached patch fixes the problem for me.
> In my particular situation, the map key type is a java.lang.Enum.  Here's what my annotated property looks like:
>    @ManyToMany
>     @JoinTable(
> 	name="chargeback_owner"
> 	,joinColumns=@JoinColumn(name="person_id",referencedColumnName="person_id")
> 	,inverseJoinColumns=@JoinColumn(name="owner_person_id")
>     )
>     @MapKey(columns=@Column(name="owner_type_cd"),targetElement=ChargebackOwnerType.class)
>     @Enumerated(EnumType.STRING)
>     @Sort(type=SortType.NATURAL)
>     private SortedMap<ChargebackOwnerType,Person> owners = new TreeMap<ChargebackOwnerType, Person>();

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