Tinyint在DatabaseMetaData JAVA中作为位返回

Tinyint在DatabaseMetaData JAVA中作为位返回,java,mysql,hibernate,jdbc,Java,Mysql,Hibernate,Jdbc,MySql tinyint在java中返回为位,列大小返回为null。对于其他数据类型,它工作正常。有什么解决办法吗 Class clsObj = Class.forName(className); AbstractEntityPersister classMetadata = (AbstractEntityPersister) getSessionFactory().getClassMetadata(clsObj); String[] properties = classMetadata.ge

MySql tinyint在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);
}

我们也有类似的问题。看起来MySQL的较新版本,即5.0.6之后的版本,比如8定义了一个位列类型,它是TINYINT1的别名。此外,还引入了BOOL和BOOLEAN。为了解决这个问题,我们决定使用java连接字符串选项tinyInt1isBit=false来正确报告定义正确的TINYINT列。我们不使用比特。希望这有帮助。

我无法用mysql-connector-java-5.1.46重现您的问题。对于我来说,.getColumns分别为类型\名称、列\大小和十进制\数字返回TINYINT、3和0。你能提供一个具体的版本信息,包括驱动程序版本、服务器版本等吗?MySQL版本是什么?您使用的JDBC驱动程序是什么?