Я исследовал, как Hibernate
делал это, используя dialect
, и придумал код.
Сначала я сопоставил java type
с sql type integer value
MAPPING = new HashMap<String, Integer>();
MAPPING.put("short", Types.SMALLINT);
MAPPING.put("java.lang.Short", Types.SMALLINT);
MAPPING.put("int", Types.INTEGER);
MAPPING.put("java.lang.Integer", Types.INTEGER);
MAPPING.put("float", Types.FLOAT);
MAPPING.put("java.lang.Float", Types.FLOAT);
MAPPING.put("long", Types.BIGINT);
MAPPING.put("java.lang.Long", Types.BIGINT);
MAPPING.put("BigInteger", Types.BIGINT);
MAPPING.put("double", Types.DECIMAL);
MAPPING.put("java.lang.Double", Types.DECIMAL);
MAPPING.put("java.math.BigDecimal", Types.DECIMAL);
MAPPING.put("BigDecimal", Types.DECIMAL);
MAPPING.put("Integer", Types.DECIMAL);
MAPPING.put("Decimal", Types.DECIMAL);
MAPPING.put("boolean", Types.SMALLINT);
MAPPING.put("java.lang.Boolean", Types.SMALLINT);
MAPPING.put("Date", Types.TIMESTAMP);
MAPPING.put("char", Types.VARCHAR);
MAPPING.put("java.lang.Character", Types.VARCHAR);
MAPPING.put("byte", Types.CHAR);
MAPPING.put("java.lang.Byte", Types.CHAR);
MAPPING.put("java.lang.String", Types.VARCHAR);
MAPPING.put("String", Types.VARCHAR);
MAPPING.put("java.lang.Object", Types.JAVA_OBJECT);
Тогда я использовал отображение
//the type value varies with the dialect of the store
registerColumnType(-7, "bit");
registerColumnType(16, "boolean");
registerColumnType(-6, "tinyint");
registerColumnType(5, "smallint");
registerColumnType(4, "integer");
registerColumnType(-5, "bigint");
registerColumnType(6, "float($p)");
registerColumnType(8, "double precision");
registerColumnType(2, "numeric($p,$s)");
registerColumnType(7, "real");
registerColumnType(91, "date");
registerColumnType(92, "time");
registerColumnType(93, "timestamp");
registerColumnType(-3, "bit varying($l)");
registerColumnType(-4, "bit varying($l)");
registerColumnType(2004, "blob");
registerColumnType(1, "char($l)");
registerColumnType(12, "varchar($l)");
registerColumnType(-1, "varchar($l)");
registerColumnType(2005, "clob");
registerColumnType(-15, "nchar($l)");
registerColumnType(-9, "nvarchar($l)");
registerColumnType(-16, "nvarchar($l)");
registerColumnType(2011, "nclob");
registerColumnType(-7, "SMALLINT");
registerColumnType(-6, "SMALLINT");
registerColumnType(-5, "NUMERIC(21,0)");
registerColumnType(5, "SMALLINT");
registerColumnType(1, "CHARACTER(1)");
registerColumnType(8, "DOUBLE PRECISION");
registerColumnType(6, "FLOAT");
registerColumnType(7, "REAL");
registerColumnType(4, "INTEGER");
registerColumnType(2, "NUMERIC(21,$l)");
registerColumnType(3, "NUMERIC(21,$l)");
registerColumnType(91, "DATE");
registerColumnType(92, "TIME");
registerColumnType(93, "TIMESTAMP");
registerColumnType(12, "CHARACTER($l)");
registerColumnType(2004, "BLOB($l)");
И код поиска был такой
public String toSQLType(String java_type){
String type=columnTypes.get(JAVA_DATABASE_MAPPING.get(java_type));
return type;
}