Hi all...
I'm having a little problem trying to map my objects. My mapping looks
like this:
<class name="Foo" table="Foo" discriminator-value="0">
<id="fooId" />
<property name="name" />
<subclass name="FooBar" discriminator-value="1">
<one-to-one name="proxy" class="FooBarProxy" constrained="false"
cascade="all" />
</subclass>
<subclass name="FooBaz" discriminator-value="2">
<one-to-many name="proxy" class="FooBazProxy" constrained="false"
cascade="all" />
</subclass>
</class>
<class name="FooBarProxy" table="FooBar">
<id="fooBarId" />
<property name="bar" />
<set role="baz" table="Baz" lazy="true" cascade="all">
<key column="fooBarId" />
<one-to-many class="FooBaz" />
</set>
</class>
<class name="FooBazProxy" table="FooBaz">
<id="fooBazId" />
<property name="baz" />
</class>
The db looks like this:
create table Foo ( fooId bigint not null primary key, discriminator
bigint not null, name varchar(256) )
create table FooBar (fooBarId bigint not null primary key, name
varchar(256) )
create table FooBaz (fooBazId bigint not null primary key, name
varchar(256), fooBarId bigint )
This is what I'm trying to do:
FooBar fb = new FooBar();
Set set = new HashSet();
set.add(new FooBaz());
fb.setBaz(set);
session.save(fb);
FooBar and FooBaz are both subclasses of Foo.
Here's the error log:
Hibernate: insert into Foo ( name, fooId, discriminator ) values ( ?, ?, 1 )
Hibernate: insert into FooBar ( bar, fooBarId ) values ( ?, ? )
Hibernate: insert into Foo ( name, fooId, discriminator ) values ( ?, ?, 2 )
Hibernate: insert into FooBaz ( baz, fooBazId ) values ( ?, ? )
Hibernate: update Foo set fooBarId = ? where fooId = ?
Sep 5, 2002 2:10:56 AM cirrus.hibernate.helpers.JDBCExceptionReporter
logExceptions
WARNING: SQL Error: 904, SQLState: 42000
Sep 5, 2002 2:10:56 AM cirrus.hibernate.helpers.JDBCExceptionReporter
logExceptions
SEVERE: ORA-00904: "FOOBARID": invalid identifier
I understand why Hibernate tries to set fooBarId in table Foo instead of
table FooBaz. What I want to know is if there is another way I can
define the mapping and/or the classes to achieve what I want to do. I
guess I could use a many-to-many association instead, but I'd really
rather not introduce another table if it's at all avoidable.
Does anyone have any suggestions?
Thanks,
-Mark
|