Here's the mapping I used:
Code:
<hibernate-mapping>
<class name="Foo">
<id name="id" column="seq_foo_id">
<generator class="sequence">
<param name="sequence">seq_enc_id</param>
</generator>
</id>
<property name="name"/>
<one-to-one class="Bar" name="bar" outer-join="true" cascade="all"/>
</class>
<class name="Bar">
<id name="id" column="seq_bar_id">
<generator class="sequence">
<param name="sequence">seq_enc_id</param>
</generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
so when you load Foo using the following code:
Code:
Foo myfoo = (Foo)session.load(Foo.class,new Long(172));
and set the "show.sql" property of hibernate to "true". YOu'll see the following in your log:
Code:
select
foo0_.seq_foo_id as seq_foo_id1_,
foo0_.name as name1_,
bar1_.seq_bar_id as seq_bar_id0_,
bar1_.name as name0_
from Foo foo0_, Bar bar1_
where foo0_.seq_foo_id=?
and foo0_.seq_foo_id=bar1_.seq_bar_id(+)
If you set the "outer-join" to false, you'll see the log printing 2 select statements 1 for each table.
To save "Foo" with no Bars, you'll have code like this:
Code:
Foo myfoo = new Foo();
myfoo.setName("Anand1");
//this would insert 1 row into Foo table.
session.save(myfoo);