From: Mark W. <mor...@SM...> - 2002-09-05 10:35:51
|
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 |