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

时间:2012-08-27 21:29:22

标签: java mysql hibernate maven

我正在执行我的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?

6 个答案:

答案 0 :(得分:2)

使用@Basic表示基本整数。您可以随时尝试将您的ID声明为Long。我通常总是使用Long来获取我的ID。见Mapping Identifier Properities

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

答案 1 :(得分:2)

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

TINYINT表示8位值。它映射到byte / Byte。在这两种情况下,它的最小值为-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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

@Column(columnDefinition = "TINYINT")

答案 4 :(得分:0)

@Column(columnDefinition = "int")

答案 5 :(得分:0)

尝试添加类型注释:

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