Я работаю с существующей базой данных MySQL, где все типы столбцов INT были установлены как INT (11).
Используя Hibernate, глобальные значения соответствующих сгенерированных классов устанавливаются как Integer, что будет становится проблемой, когда значение строки имеет более 9 цифр.
Итак, я создал файл обратного инжиниринга, подобный этому:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<type-mapping>
<sql-type jdbc-type="BIGINT" hibernate-type="Long"></sql-type>
<sql-type jdbc-type="INTEGER" hibernate-type="Long"
length="12"></sql-type>
<sql-type jdbc-type="INTEGER" hibernate-type="Long"
length="11"></sql-type>
<sql-type jdbc-type="INTEGER" hibernate-type="Integer"
length="8"></sql-type>
<sql-type jdbc-type="INTEGER" hibernate-type="Integer"
length="9"></sql-type>
<sql-type jdbc-type="INTEGER" hibernate-type="Long"
length="10"></sql-type>
<sql-type jdbc-type="SMALLINT" hibernate-type="Integer"></sql-type>
</type-mapping>
<table-filter match-name="DATABASECHANGELOG"
exclude="true">
</table-filter>
<table-filter match-name="DATABASECHANGELOGLOCK"
exclude="true">
</table-filter>
</hibernate-reverse-engineering>
Причина, по которой я это сделал, заключается в том, что эта база данных также имеет столбцы MEDIUMINT и SMALLINT, и я хотел бы сохранить их как Integer, поскольку Long в этих случаях не требуется.
Проблема в том, что результирующие классы выглядят следующим образом:
INT - Integer (I was expecting Long)
MEDIUMINT - Integer (I know that this Java SQL type doesn't exist that is why I adopted this INTEGER length strategy)
SMALLINT - Integer
Что кажется, что свойство "length" отбрасывается.
Есть идеи?