Отобразить tinyint как булевский спящий режим
У меня есть тип BOOLEAN в таблице MySQL (TINYINT (1)), и я пытаюсь отобразить логическое поле в сущности, но это порождает исключение:
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: boolean
Я изменил поле в моей сущности на байт и внес соответствующие изменения, чтобы он работал логически, и я получаю:
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: tinyint
Я попытался использовать аннотацию @Type
в поле:
@Type(type = "org.hibernate.type.NumericBooleanType")
но я получаю:
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: integer
Ответы
Ответ 1
Из того, что я читаю здесь:
org.hibernate.HibernateException: неправильный тип столбца в maegul.users для администратора столбца. Найдено: бит, ожидается: целое число
Кажется, Hibernate ожидает целое число и немного поработал.
Это означает, что ваша аннотация теперь правильная:
@Type(type = "org.hibernate.type.NumericBooleanType")
Но, возможно, он обновил вашу базу данных, чтобы установить как бит вместо целого числа, таким образом, ошибку.
Если вам действительно нужен TinyInt, вы можете использовать @Type
AND @Column
для установки как Integer типа TinyInt:
@Column(columnDefinition = "TINYINT")
@Type(type = "org.hibernate.type.NumericBooleanType")
public boolean admin = true;
Ответ 2
Лучше использовать BIT(1)
вместо TINYINT(1)
@Column(nullable = false, columnDefinition = "BIT", length = 1)
private boolean flag = false;
Ответ 3
Вы можете сделать это из диалекта, который не потребует утомительной аннотации уровня col во всех местах:
import org.hibernate.Hibernate;
import org.hibernate.dialect.PostgreSQLDialect;
import java.sql.Types;
public class PostgresCustomConversionDialect extends PostgreSQLDialect {
public PostgresCustomConversionDialect() {
super();
this.registerColumnType( Types.BIT, "numeric(1, 0)" );
this.registerColumnType( Types.BOOLEAN, "numeric(1, 0)" );
}
public String toBooleanValueString(boolean bool) {
return bool ? "1" : "0";
}
}
Затем используйте этот пользовательский диалект в качестве диалекта postgres в - "hibernate.dialect"
Ответ 4
Попробуй это:
<property name="isPaymentReceived" type="java.lang.Boolean">
<column name="IS_PAYMENT_RECEIVED" sql-type="tinyint"/>
</property>
Ответ 5
Я смог решить эту проблему, добавив "transformBitIsBoolean = true" в мою строку подключения MySQL.
См. Этот вопрос: "Найдено: бит, ожидаемый: boolean" после обновления Hibernate 4
И это сообщение форума: https://hibernate.atlassian.net/browse/HHH-6935
Ответ 6
Что неправильно с отображением его как int и использованием accessor (isAdmin), чтобы получить логическое значение. Надеюсь, вы все равно скрываете фактический тип.
Ответ 7
Сопоставление его как org.hibernate.type.BooleanType может работать.
См. Http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic.
Ответ 8
Сегодня я столкнулся с подобной ситуацией с hibernate и в итоге получил тип данных mysql как tinyint (1) и объявил тип спящего режима как логический, и он сделал трюк
Ответ 9
Аннотация @Type представляет собой аннотацию hibernate для использования с JPA, можно использовать атрибут ColumnDefiniton.
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean isTrue;