Thanks for your willingness to help, gavin
Here are the mappings (just to eliminate all factors, I resorted to specifying left outer join in three different ways: outer-join="true" fetch="join" and in hql)
Code:
<hibernate-mapping package="smefs.pojo">
<class name="BuyerMgr" table="V_BUYER_MGR">
<composite-id name="id" class="BuyerMgrKey">
<key-property name="buyerCode" column="BUYER_CODE" type="string"/>
<key-property name="secGroupCd" column="SEC_GROUP_CD" type="string"/>
<key-property name="sourceSystem" column="SOURCE_SYSTEM" type="string"/>
</composite-id>
<property name="buyerName" column="BUYER_NAME" type="string" />
<many-to-one name="userIdentity" formula="BUYER_USER_ID" class="UserIdentity" not-found="ignore" outer-join="true" fetch="join"/>
<property name="buyerUserId" column="BUYER_USER_ID" type="string" insert="false" update="false"/>
</class>
</hibernate-mapping>
Code:
<hibernate-mapping package="smefs.pojo">
<class name="UserIdentity" table="T32_USER_IDENTITY_REF">
<id name="userId" column="USER_ID" type="string"/>
<property name="firstName" column="FIRST_NAME" type="string" not-null="true" />
<property name="lastName" column="LAST_NAME" type="string" not-null="true" />
<property name="timestamp" column="TIMESTAMP" type="timestamp" not-null="true" />
</class>
</hibernate-mapping>
Here's the code I'm running:
Code:
return HibernateUtil.getCurrentSession().createQuery("from BuyerMgr bm left join fetch bm.userIdentity").list();
And here's what I get:
Hibernate: select buyermgr0_.BUYER_CODE as BUYER1_1_0_, buyermgr0_.SEC_GROUP_CD as SEC2_1_0_, buyermgr0_.SOURCE_SYSTEM as SOURCE3_1_0_, useridenti1_.USER_ID as USER1_8_1_, buyermgr0_.BUYER_NAME as BUYER4_1_0_, buyermgr0_.BUYER_USER_ID as BUYER5_1_0_, buyermgr0_.BUYER_USER_ID as formula0_0_, useridenti1_.FIRST_NAME as FIRST2_8_1_, useridenti1_.LAST_NAME as LAST3_8_1_, useridenti1_.TIMESTAMP as TIMESTAMP8_1_ from V_BUYER_MGR buyermgr0_ left outer join T32_USER_IDENTITY_REF useridenti1_ on buyermgr0_.BUYER_USER_ID=useridenti1_.USER_ID
Hibernate: select useridenti0_.USER_ID as USER1_8_0_, useridenti0_.FIRST_NAME as FIRST2_8_0_, useridenti0_.LAST_NAME as LAST3_8_0_, useridenti0_.TIMESTAMP as TIMESTAMP8_0_ from T32_USER_IDENTITY_REF useridenti0_ where useridenti0_.USER_ID=?
Hibernate: select useridenti0_.USER_ID as USER1_8_0_, useridenti0_.FIRST_NAME as FIRST2_8_0_, useridenti0_.LAST_NAME as LAST3_8_0_, useridenti0_.TIMESTAMP as TIMESTAMP8_0_ from T32_USER_IDENTITY_REF useridenti0_ where useridenti0_.USER_ID=?
Hibernate: select useridenti0_.USER_ID as USER1_8_0_, useridenti0_.FIRST_NAME as FIRST2_8_0_, useridenti0_.LAST_NAME as LAST3_8_0_, useridenti0_.TIMESTAMP as TIMESTAMP8_0_ from T32_USER_IDENTITY_REF useridenti0_ where useridenti0_.USER_ID=? and then a whole bunch of these identical selects