【问题标题】:Hibernate using Uuid generation使用 Uuid 生成休眠
【发布时间】:2013-03-31 12:49:08
【问题描述】:

这方面似乎有很多问题,但没有一个能解决我的问题。

我正在尝试使用休眠注释来生成 UUID。

我的注释在下面...

@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
public UUID getUuid() {
    return uuid;
}

我在 pom.xml 中使用 MySQL 5.2 和 Hibernate 3.5.6,如下所示...

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.5.6-Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.5.6-Final</version>
        </dependency>

在启动我的应用程序时,我收到以下错误...

ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table players (uuid tinyblob not null unique, espnid integer, espnUrl varchar(255), firstname varchar(255), lastname varchar(255), primary key (uuid))
ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - BLOB/TEXT column 'uuid' used in key specification without a key length

什么是正确的注释?我是否使用了不正确的休眠版本?我是否在 MySQL 中使用了不正确的东西?

我的方言详情如下...

<beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
                </beans:prop>
                <beans:prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory
                </beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">create</beans:prop>
            </beans:props>
        </beans:property>

该错误意味着未指定长度,但如果我将其输入@Column,则不会发生任何变化。

我只使用旧版本的 hibernate,因为 hibernate-annotations 直到那时才会出现,如果现在这是一个死回购,我将移至更高版本。

【问题讨论】:

    标签: java mysql spring hibernate jpa


    【解决方案1】:

    我认为问题在于getUuid() 方法返回的类型。根据休眠文档,它必须是String

    uuid:

    使用 128 位 UUID 算法生成类型标识符 在网络中唯一的字符串(使用 IP 地址)。这 UUID 被编码为长度为 32 位十六进制数字的字符串。

    【讨论】:

    • 啊,我也这么认为,但是从 Hibernate 3.6 开始,我认为他们支持 UUID 数据类型?刚刚阅读stackoverflow.com/questions/4346898/…
    • 您在问题中指定了休眠版本 3.5。是的,链接的问题非常适用于 hiberante 3.6
    • 啊,对不起,我会编辑我的问题,如果我需要更新休眠,我会非常乐意,但是从查看 maven 存储库来看,注释存储库只持续到 3.5.6,是现在是一个死回购?
    • 太好了,看起来 hibernate-annotations 实际上不再需要,我可以使用 hibernate-core,非常感谢,将更新到 hibernate4。
    猜你喜欢
    • 2014-10-26
    • 2011-12-26
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多