Hi,
my first experiment with Hibernate3 (
3.0rc1).
I have a Topic class, which is a subclass of Post (table per class hierarchy strategy)
Code:
<class name="Post" table="post">
<id name="id"><generator class="native"/></id>
<discriminator column="post_type" type="string"/>
<many-to-one name="forum" column="forum_id" not-null="true"/>
<many-to-one name="user" column="user_id" not-null="true"/>
<property name="date" column="post_date" type="timestamp"/>
<property name="message"/>
<subclass name="Topic" discriminator-value="topic">
<property name="title"/>
</subclass>
<subclass name="Reply" discriminator-value="reply">
<many-to-one name="Topic" column="topic_id"/>
</subclass>
</class>
trying to load a specific instance of Topic
Code:
Session session = sessionFactory.openSession();
Topic topic = (Topic) session.load(Topic.class, new Long(1));
session.close();
results in the following exception
Code:
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.AbstractTuplizer.createProxy(AbstractTuplizer.java:249)
at org.hibernate.persister.entity.BasicEntityPersister.createProxy(BasicEntityPersister.java:2801)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:242)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:123)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:549)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:544)
at persistence.PersistenceTest.main(PersistenceTest.java:18)
Retrieving the same instance as a Post (superclass) instead works fine.
Retrieving the same instance as a Topic but using session.get() instead of load() works too.
The same code in Hibernate 2.1.8 works fine.
Database is HSQLdb 1.8.0rc9. No SQL is printed out when the exception occurs. When using get() instead of load() the SQL is
Code:
select topic0_.id as id0_, topic0_.forum_id as forum3_2_0_, topic0_.user_id as user4_2_0_, topic0_.post_date as post5_2_0_, topic0_.message as message2_0_, topic0_.title as title2_0_ from post topic0_ where topic0_.id=?
I am a bit confused about this session.get() vs. load(). My understand of the API docs was that load() is ok when the instance is supposed to exist. Should I just use get() instead?
Thanks
Mirko