I have a class mapped as follows...

<class name="equipment" table="MSF600">

<id name="equipNo" column="EQUIP_NO"/>

<map name="nameplate" table="MSF6A4" outer-join="true" fetch="join">
<key column="EQUIP_NO"/>
<map-key column="ATTRIB_NAME" type="string"/>
<element column="ATTRIB_VALUE" type="string"/>
</map>

</class>

The map collection allows me to perform queries on the equipment as follows...

from equipment where nameplate["TARIFF"] not in ('RU', 'BG')

This works fine up until I want to do a query like this...

from equipment where nameplate["TARIFF"] is null or nameplate["TARIFF"] not in ('RU', 'BG')

The problem happens because hibernate performs an implicit inner join with the MSF6A4 table when it detects a nameplate[""] in the where clause. If the "TARIFF" nameplate doesn't exist, the join will not match and so no results will be returned.

I know I can use...

from equipment where "TARIFF" not in indices(nameplate)

but still doesn't work in a combined where clause like this..

from equipment where "TARIFF" not in indices(nameplate) or nameplate["TARIFF"] not in ('RU', 'BG')

because as soon as the nameplate["TARIFF"] appears, hibernate does the implicit inner join to MSF6A4 again and finds no results.

I think my problem would be solved if I could force hibernate to perform an outer-join on the MSF6AF table.

Is this possible? Is there some other way to get this to work?