Nope, nothing wrong - this is the expected behavior. Loading a one-to-one object always loads it's connected object.
The best way around this is actually to use a one-to-one mapping on one end and a many-to-one mapping with unique="true". The many-to-one end will be the "parent" and the one-to-one end will be the "child".
The child object's id needs to be set using the "foreign" generator.
Code:
<class name="Parent" table="Parents" lazy="true">
<id name="Id" column="ParentID" unsaved-value="0" >
<generator class="native" />
</id>
<many-to-one name="MyChild" class="Child" column="ChildID" unique="true"/>
</class>
Code:
<class name="Child" table="Children" lazy="true">
<id name="Id" column="ChildID" >
<generator class="foreign">
<param name="property">MyParent</param>
</generator>
</id>
<one-to-one name="MyParent" class="Parent" />
</class>
Note that this this also allows you to have a 1 -> 0 or 1 relationship.
Hope this helps.
Cheers,
Symon.