Hi.
You are using special data type UUID in H2 database. You are using Object type in an entity. JPA doesn't have special support for UUID java type. So, it stores it as serialized data, which is in database terms is a binary BLOB. That serialized byte array doesn't quite fit into the UUID type in H2 database.
If OpenJPA has an adapter framework to support custom types (not that I know it does), that would be the best thing to use here.
Otherwise, you either need to declare your trackingId entity field as String (dunno what H2 would say to that), or declare your trackingId column as BLOB. Neither of those options sound good for what you are probably trying to do, so I would normalize both the field, and the column to be strings (for H2, you can use VARCHAR_IGNORECASE even). You can have helper UUID getTrackingIdUUID() and setTrackingIdUUID(UUID) methods in your entity, that would convert a string into UUID and back, depending on whether it's a set or a get.
Thanks, Pawel. On 02/28/2012 12:26 AM, Charles Moulliard wrote:
Hi, I get the following exception with OpenJPA 2.1.1 deserialize a UUID Type from a H2 Database. IS there a trick ? Caused by: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280) [classes.jar:1.6.0_29] at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3018) [classes.jar:1.6.0_29] at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1050) [classes.jar:1.6.0_29] at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:616) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:808) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) [classes.jar:1.6.0_29] at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) [classes.jar:1.6.0_29] at org.apache.openjpa.util.Serialization.deserialize(Serialization.java:86) [openjpa-all-2.1.1.jar:2.1.1] Model @Entity @Table(name = "T_REQUEST") @NamedQueries({ @NamedQuery( name = "findRequestById", query = "SELECT req FROM Request req WHERE req.id = :id" ), @NamedQuery( name = "findAllRequests", query = "SELECT req FROM Request req" ) }) public class Request implements java.io.Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "REQUEST_ID") private Long id; @Column(name = "TRACKING_ID") @Transient private UUID trackingId; .... DB Script CREATE TABLE PUBLIC.T_REQUEST ( REQUEST_ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY, REQUESTER VARCHAR(50), TRACKING_ID UUID, STATUS_APP1 VARCHAR(10), STATUS_APP2 VARCHAR(10), DESCRIPTION VARCHAR(50), REPLY_TO VARCHAR(70), CREATION_DATE TIMESTAMP, MODIFICATION_DATE TIMESTAMP ); Regards, Charles -- View this message in context: http://openjpa.208410.n2.nabble.com/EOFException-during-UUID-deserialize-tp7324828p7324828.html Sent from the OpenJPA Users mailing list archive at Nabble.com.