We have a number of data objects. The objects and the database use a java.util.UUID as a surrogate keys. In the database, the data type is a char(36). When we attempt to use a BeanPropertySqlParameterSource along with a Named Parameter operations, a "incompatible data type in conversion" Exception is thrown. This is obviously because the UUID object cannot be mapped directly to an SQL data type. The UUID class has a standard toString() method that has the value we want. But since it is not a "getter", we cannot use dot notation in the sql (i.e. we cannot use :key.string or :key.toString).
Given the number of data objects we have, and the number of properties on some of them, we would really like to use the BeanPropertySqlParameterSource rather than having to create a MapSqlParameterSource and individually add all the properties.
Is there a way to handle non stabdard data types in a simple manner within the Spring JDBC APIs? Or will we need to either write a customized BeanPropertySqlParameterSource, or added a second getter to our DataObjects that get any UUIDs as Strings and use that "property" in the named parameter syntax?
sqlStatement = "INSERT INTO table_name
(key, foreign_key_to_other, value_one, value_two)
(:key, :foreignKeyToOther, :valueOne, :valueTwo)";
sqlParameterSource = new BeanPropertySqlParameterSource(dataObject)
public class DataObject
private UUID key;
private UUID foreignKeyToOther;
private String valueOne;
private int valueTwo;
//Setters and getters for above