1) The association from Assurance to Risque should refer to Risque, not the subclasses. Hibernate will sort out the rest. There is nothing special that you have to to, it's just like having an association to a class with no subclasses.
2) Yes, it looks like formula is what you need. Put your SQL (not HQL) code in the formula. Subqueries are allowed. Case is more usual, though:
Code:
<discriminator type="int">
<formula>
case when (col1 > (col4 * 7) and col2 = 'test')) then 1
when (col2 <> 'test') then 2
else (select t.disc from table t where t.id = tableid)
end
</formula>
</discriminator>
Columns without prefixes used in the formula (tableid, in the example above) are from the main table: if you have a <join> you cannot use columns from it, and you also can't use columns from joined-subclass tables.