将一个小值映射为布尔休眠

2022-09-01 07:34:49

我在MySQL表中有一个布尔类型(TINYINT(1)),我正在尝试在实体中映射布尔字段,但这会产生异常:

org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: boolean

我将实体中的字段更改为byte并进行相应的更改,使其充当布尔值,我得到:

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")

但也许它已经更新了你的数据库设置为Bit而不是整数,因此错误。

如果你真的需要一个 TinyInt,你可以使用 AND ,设置为 Integer,类型 TinyInt :@Type@Column

@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;