MySql tinyint将作为BIT在Java中返回,并且列大小将作为null返回。对于其他数据类型,它工作正常。有什么解决办法吗?
Class clsObj = Class.forName(className);
AbstractEntityPersister classMetadata = (AbstractEntityPersister) getSessionFactory().getClassMetadata(clsObj);
String[] properties = classMetadata.getPropertyNames();
String tableName = classMetadata.getTableName();
Map<String, String> dbFieldToPojoFieldMap = new HashMap<String, String>();
for (String prop : properties) {
String[] names = classMetadata.getPropertyColumnNames(prop);
dbFieldToPojoFieldMap.put(names[0], prop);
}
DatabaseMetaData meta = con.getMetaData();
ResultSet rsColumns = meta.getColumns(null, null, tableName, null);
while (rsColumns.next()) {
Map<String, String> columnMetaData = new HashMap<String, String>();
String columnName = rsColumns.getString(Constants.COLUMN_NAME);
String columnType = rsColumns.getString(Constants.TYPE_NAME);
String columnSize = rsColumns.getString(Constants.COLUMN_SIZE);
String decimalDigits = rsColumns.getString(Constants.DECIMAL_DIGITS);
}
答案 0 :(得分:1)
我们遇到了类似的问题。看起来MySQL的较新版本(即5.0.6后的版本,如8)定义了BIT
列类型,该列类型是TINYINT(1)
的别名。此外,还引入了BOOL
和BOOLEAN
。为了为我们解决此问题,我们决定使用java连接字符串选项"tinyInt1isBit=false"
来正确报告正确定义的TINYINT
列。我们不使用BIT
。希望这会有所帮助。