Solved...
Ended up using a formula which feels a bit hokey but seems to be the only way.
Code:
<hibernate-mapping package="com.ilign.ppm.domain">
<class name="OutputClass" table="OUTPUT_CLASS" lazy="true">
<id name="objectId" column="OUTPUT_CLASS_ID" type="long">
<generator class="hilo">
<param name="table">OBJECT_ID</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
<version name="vsn" column="VSN" type="integer"/>
<property name="name" column="NAME" type="string" not-null="true"/>
<property name="description" column="DESCRIPTION" type="string" not-null="true" />
<property name="startDate" column="START_DATE" type="com.ilign.ppm.common.PersistentDateTime" not-null="true" />
<property name="endDate" column="END_DATE" type="com.ilign.ppm.common.PersistentDateTime" not-null="true" />
<component name="budget" class="com.ilign.ppm.common.ForeignCurrency" >
<component name="baseMoney" class="com.ilign.ppm.common.Money" >
<property name="amount" column="BUDGET" type="big_decimal" not-null="true"/>
<property name="currencyCode" update="false" insert="false">
<formula>
( Select ac.config_value from application_config ac where ac.config_id = '17' )
</formula>
</property>
</component>
<component name="srcMoney" class="com.ilign.ppm.common.Money" >
<property name="amount" column="SRC_BUDGET" type="big_decimal" />
<property name="currencyCode" column="SRC_BUDGET_CURR_CODE" type="string" />
</component>
</component>
</class>
</hibernate-mapping>