Google App Engine supports JPA 2 so it seems one can be isolated from specific features of Datastore (Google App Engine storage service). In theory JPA has no problems with persisting BigDecimal fields. However it turns out that in JPA implementation used by Google App Engine 1.9.2 BigDecimal values are stored as double IEEE 754 floating point values by default. When restoring BigDecimal values are not equal to values that were stored! The fractional part is extended by semi-random digits (rounding issues due to IEEE 754 encoding): 0.100 becomes something like 0.1000000000000000055511151231257827021181583404541015625. There was a fix but it’s turned off by default and its usage is not well documented.
SOLUTION:
Edit your persistence.xml file and add following property:
<property name="datanucleus.appengine.BigDecimalsEncoding" value="String"/>
In effect BigDecimal values will be stored as String values underneath, what seems much better solution. The drawback I know is BigDecimals loose scale: 0.100 will become 0.1