【问题标题】:Hibernate - How to provide right mapping to integer type?Hibernate - 如何为整数类型提供正确的映射?
【发布时间】: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”标签吗?
  • 让我展示你的客户实体。

标签: java mysql hibernate maven


【解决方案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?
      猜你喜欢
      • 2022-06-22
      • 2016-10-03
      • 2014-01-20
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2021-08-15
      相关资源
      最近更新 更多