Hibernate - 如何为整数类型提供正确的映射?

Posted

技术标签:

【中文标题】Hibernate - 如何为整数类型提供正确的映射?【英文标题】:Hibernate - How to provide right mapping to integer type? 【发布时间】:2012-08-22 09:46:05 【问题描述】:

我正在执行我的 maven 构建,它抛出了这个异常:

Last cause: Wrong column type in x.clients for column type. Found: tinyint, expected: integer

我是这样映射的:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

我正在使用 InnoDB 创建列,如下所示:id int NOT NULL UNIQUE AUTO_INCREMENT

这不应该吗?为什么说他在找tinyint?

【问题讨论】:

我认为这与 Wicket 无关,请您删除“wicket”标签吗? 让我展示你的客户实体。 【参考方案1】:

将此添加到id 字段的注释中:

@Column(columnDefinition = "TINYINT")

【讨论】:

仍然给我同样的例外。【参考方案2】:
@Column(columnDefinition = "int")

【讨论】:

仍然给我同样的例外。【参考方案3】:

尝试添加类型注释:

@Type(type = "org.hibernate.type.IntegerType")

【讨论】:

【参考方案4】:

使用@Basic 表示基本整数。不过,您总是可以尝试将您的 ID 声明为 Long。我通常总是使用 Long 作为我的 ID。见Mapping Identifier Properities:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

【讨论】:

好吧,将 id 设置为 Long 确实起到了作用。但由于某种原因,我不能在整数上使用 tinyint。嗯嗯。【参考方案5】:

我刚遇到这个问题,分享详细信息应该很有用。我的情况是:

你定义@Column (... definition = "integer" ) Oracle 将“整数”翻译成小数(0,-127)(或者小数(0),我还不清楚) 您使用了一些其他应用程序,其中 'test.hibernate.hbm2ddl.auto' 是 'validate' Hibernate 报告整数 != 十进制并且验证失败

我唯一的解决方案是将 test.hibernate.hbm2ddl.auto 保持为空(未定义 = 未触及数据库)。不确定是 Oracle 还是 Hibernate 错误(或两者兼有)。

【讨论】:

【参考方案6】:

我知道这个问题(真的!)老了,但是:

TINYINT 表示 8 位值。它映射到字节/字节。在这两种情况下,它的最小值为 -128,最大值为 127(含)。

SMALLINT 表示 16 位值。它映射到短/短。

INTEGER 表示 32 位值。它映射到 int/Integer。

BIGINT 表示 64 位值。它映射到 long/Long。

因此,您不能使用 Integer 映射 tinyint;你必须使用字节。

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

【讨论】:

为什么建议使用 tinyint 映射到 Byte 而不是 Short?

以上是关于Hibernate - 如何为整数类型提供正确的映射?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Camellia 密码提供正确的密钥并在 Java 中进行加密

spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?

如何为这个 React Native Typescript 导航问题提供正确的参数

如何为 JPA 和 Hibernate 创建一个 persistence.xml 文件?

如何为不同类型的用户制作出价表结构

Java/Hibernate:如何为复杂的 SQL 编写 DAO 代码