]
Emmanuel Bernard resolved HHH-4257.
-----------------------------------
Resolution: Fixed
Fix Version/s: 3.5.0-Beta-3
Your patch is correct. I've applied the same logic recently on trunk.
map key type no longer inferred correctly, throws exception at
runtime
----------------------------------------------------------------------
Key: HHH-4257
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4257
Project: Hibernate Core
Issue Type: Bug
Components: annotations
Environment: hib. 3.2, annotaions 3.3.1GA, em 3.3.1GA, oracle 10r2, tomcat 5.5,
linux, spring 2.0
Reporter: David Mansfield
Fix For: 3.5.0-Beta-3
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/...
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: