Folks
I have two tables employee and address:
Code:
drop table employee;
create table employee
(
name varchar(30),
street varchar(30),
primary key (name)
) engine=innodb
;
drop table address;
create table address
(
street varchar(30),
city varchar(10),
primary key (street)
) engine=innodb
;
insert into employee(name, street) values ('emp1', 'street1');
insert into employee(name, street) values ('emp2', 'street1');
insert into address(street, city) values( 'street1', 'city1');
select e.name, a.city
from employee e, address a
where e.street = a.street;
I also have the standard bean classes Employee and Address for these two tables. Both are serializable. I can reproduce them if required.
My hibernate mapping files for address is straight forward:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.learning.hibernate.Address">
<id name="street" column="street" type="string" />
<property name="city" type="string" />
</class>
</hibernate-mapping>
My hibernate mapping for Employee:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.learning.hibernate.Employee">
<id name="name" column="name" type="string" />
<property name="address" type="com.learning.hibernate.Address" />
</class>
<sql-query name="empSql">
<return alias="e" class="com.learning.hibernate.Employee">
<return-property name="name" column="name" />
<return-property name="address">
<return-column name="city" />
</return-property>
</return>
<![CDATA[
select e.name, a.city
from employee e, address a
where e.street = a.street
]]>
</sql-query>
</hibernate-mapping>
All I am trying to do is that when run the query, I want the Employee object created with the internal address property initialized. The relevant Java code is:
Code:
SessionFactory sf = (SessionFactory) beanFactory
.getBean("mySessionFactory");
Session session = null;
try {
session = sf.openSession();
Query query = session.getNamedQuery("empSql");
List emps = query.list();
System.out.println("employees: " + emps);
} finally {
if (session != null) {
session.close();
}
}
Can anyone please point out the mistake?
The full exception stack trace:
Code:
Exception in thread "main" org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:188)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
at org.hibernate.type.SerializableType.get(SerializableType.java:62)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)
at org.hibernate.loader.Loader.getRow(Loader.java:1230)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
at org.hibernate.loader.Loader.doQuery(Loader.java:724)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
at com.learning.hibernate.Map.main(Map.java:30)
Caused by: java.io.StreamCorruptedException: invalid stream header
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:223)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
... 21 more
Thank you!