This topic applies to Java version only
BigDecimal objects can't be stored by db4o with the default configuration:
Configuration configuration = Db4o.newConfiguration();
01public static void storeBigDecimal(Configuration configuration) { 02
new File(DB4O_FILE_NAME).delete(); 03
ObjectContainer container = database(configuration); 04
if (container != null) { 05
try { 06
BigDecimal d = new BigDecimal("-918.099995e-15"); 07
System.out.println("BigDecimal value: " + d); 08
09
container.set(d); 10
11
container.commit(); 12
} catch (Exception ex) { 13
System.out.println("Exception: " + ex.toString()); 14
} finally { 15
closeDatabase(); 16
} 17
} 18
}
01public static void retrieveBigDecimal(Configuration configuration) { 02
ObjectContainer container = database(configuration); 03
if (container != null) { 04
try { 05
ObjectSet result = container.query(BigDecimal.class); 06
listResult(result); 07
08
} catch (Exception ex) { 09
System.out.println("Exception: " + ex.toString()); 10
} finally { 11
closeDatabase(); 12
} 13
} 14
}
java.math.BigDecimal
class contains some transient fields, which prevents it from being stored correctly.
The problem can be solved by applying the following configuration to the object container:
1private static Configuration configure() { 2
Configuration configuration = Db4o.newConfiguration(); 3
//configuration.objectClass(BigDecimal.class).callConstructor(true); 4
configuration.objectClass(BigDecimal.class).storeTransientFields(true); 5
return configuration; 6
}
Try to run storeBigDecimal
and retrieveBigDecimal
methods using the new configuration.