首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate UserType和定义的长度

Hibernate UserType和定义的长度
EN

Stack Overflow用户
提问于 2010-01-05 23:31:36
回答 3查看 2.3K关注 0票数 2

我有一个类似如下的hibernate Usertype:

代码语言:javascript
复制
public class UUIDHibernateType implements UserType
{
    private static final int[] SQL_TYPES = new int[] { Types.CHAR };

    public int[] sqlTypes ()
    {
        return SQL_TYPES;
    }

    // ...
}

我遇到的问题是,hibernate生成一个类型为CHAR(1)的sql脚本,这是不正确的,我实际上需要CHAR(36)。如何定义自定义类型的默认长度?

目前,我坚持像这样定义sql类型:

代码语言:javascript
复制
<id name="id"
    type="org.openscada.ae.server.storage.jdbc.internal.UUIDHibernateType">
    <column name="ID" length="36" sql-type="CHAR(36)" not-null="true" />
    <generator class="assigned" />
</id>

在这种情况下,这应该不是问题,但如果需要的话,我该如何做呢?

PS:如果有人有更好的想法来透明地处理UUID和数据库不可知,我将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2010-01-05 23:43:17

我建议使用Hibernate内置的UUID生成器(参见the docs)。然后,Hibernate应该找出PK列的正确映射和大小等。

票数 0
EN

Stack Overflow用户

发布于 2010-01-06 01:37:52

UserType.sqlTypes返回的代码在方言中用于查找已注册的类型。因此,如果您让sqlTypes返回一个尚未使用代码,您可以继承您的方言并将该代码注册为字符(36)。例如:

//在您的自定义类型中,公共int[] sqlTypes() { return new int[] { 1337 };}

//在您的自定义方言registerColumnType(1337,"char(36)")中

我还没有尝试过,但据报道它在Hibernate论坛上可以正常工作。

票数 0
EN

Stack Overflow用户

发布于 2014-04-17 19:48:18

如果不关心UUID在数据库中的表示方式(在本例中,它将以10为基数表示),还可以将UUID映射到UserType中的BigInteger (java.sql.Types.BIGINT)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2007013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档