【问题标题】:Use hibernate JPA,mysql database,create index error使用休眠JPA,mysql数据库,创建索引错误
【发布时间】:2014-07-17 06:03:16
【问题描述】:

我正在使用休眠 JPA

hibernate 版本是3.5.1-Finalhibernate-annotations 版本也是3.5.1-Final

mysql 版本是:5.5.35-0ubuntu0.12.04.2

我有一个专栏:

@Column(name = "TITLE", length = 300)
@Index(name = "I_PRODUCT_ITEM_TITLE")
public String getTitle() {
    return title;
}

但是创建索引,给我看

ERROR o.h.tool.hbm2ddl.SchemaUpdate - Unsuccessful: create index I_PRODUCT_ITEM_TITLE on T_PRODUCT_ITEM (TITLE)
ERROR o.h.tool.hbm2ddl.SchemaUpdate - BLOB/TEXT column 'TITLE' used in key specification without a key length

不知道是什么原因....

【问题讨论】:

    标签: java mysql hibernate jpa orm


    【解决方案1】:

    由于您指定的长度为 300,所以列类型被 Hibernate 设置为 TEXT。

    在 TEXT 列上添加索引需要您 to specify a length prefix,而 Hibernate 似乎无法正确添加它。

    如果您不需要 300 的长度,而您可以忍受 255,那么您可以这样做。

    否则,您可以选择使用增量更新脚本自己创建架构,这是生产系统的首选方式。

    您应该创建一个描述此问题的 Hibernate JIRA 问题。一些complained about it since 2005

    【讨论】:

    • 您的第一个链接重定向到dev.mysql.com/doc/refman/8.0/en/char.html,说明 VARCHAR 限制为 64k(在所有列之间共享),所以 Hibernate 应该使用 VARCHAR(300),不是吗?
    • 我更新了答案。这个问题适用于非常古老的 Hibernate 3.5。最好用 5.x 试试,看看问题是否仍然存在。
    【解决方案2】:

    Jpa 不提供任何定义或创建索引的功能。您可以使用 JPA 创建唯一索引。

    您可以使用休眠创建索引。

    这个答案可以帮助你用hibernate创建索引..

    Jpa Defining An Index Column

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2014-05-14
      • 2012-04-19
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      相关资源
      最近更新 更多