1) BigDecimals is not supported by the id strategy because it is inefficient. If you want it to be inefficient then you just need to implement it in your own subclass.
2) Hibernate does generate long's by default if the underlying field is "small" enough to contain it. What is the generated mappings for you ?
So, either use a different id strategy or change the type. You can do that generally by specifying something like the following in your reveng.xml:
Code:
<type-mapping>
<sql-type jdbc-type="NUMERIC" precision='22' hibernate-type="long" />
</type-mapping>
which tells the reverse engineering to use long for columns that are java.sql.Types.NUMERIC and has a a precision of 22.