当前位置: 首页 > 知识库问答 >
问题:

在MySQL中实现二进制主键的Hibernate自定义标识符生成器

云宾鸿
2023-03-14

要求-在二进制(20)类型的MySQL表中有主键,其中前4个字节表示当前时间戳(以秒为单位的历元),其余16个字节表示类型5(基于名称)UUID(去掉破折号)。

例如57093200aee62cab765950a48ef887bcfe87a065(57093200是历元的十六进制表示),其余是UUID的十六进制表示,不带破折号

我相信这在hibernate 4.2中是可能的,但是很难得到一个工作模型

@Entity
@Table(name = "demo_table")
public class Request implements Serializable {

    @Id
    @GenericGenerator(name = "sequence_id_generator", strategy = "com.company.id.Generator")
    @GeneratedValue(generator = "sequence_id_generator")  
    @Column(name="id")
    private String id;

    :
}

public class Generator implements IdentifierGenerator {
     :
}

这里需要指导吗

共有1个答案

曾骁
2023-03-14

在生成器类中,您只需要实现该方法

Serializable generate(SessionImplementor session, Object object)

的标识符生成器接口https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/id/IdentifierGenerator.html
(基本上你可以只返回字符串格式,如你所述)

 类似资料:
  • 问题内容: 我正在将spring,h2和liquibase与hibernate一起使用,并且试图通过以本博客文章为例为我的实体创建自定义String id生成器,但出现错误: 这是我的SequenceStyleGenerator代码: 我的实体代码: 和liquibase XML: 顺便说一句,有可能避免参数sequence_name,以便hibernate可以自行处理吗? 如果有人可以帮助我,谢

  • 本文向大家介绍mysql把主键定义为自动增长标识符类型,包括了mysql把主键定义为自动增长标识符类型的使用技巧和注意事项,需要的朋友参考一下 1、把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: 一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。 在MS SQLServ

  • 问题内容: 我收到的时候我想改变我的以下异常中的。 我知道我要更改表中的主键。我正在使用JPA注释。 我通过使用以下单个HQL查询解决了此问题: 而不是使用更多的OO方法: 知道差异是什么吗? 问题答案: 我无法想象你为什么要这么做。完全没有 您为什么要更改实体的身份?您还需要更新指向它的其他表中的所有外键。似乎很痛苦,没有收获。您最好将其设置为“业务密钥”(普通属性),并使用更永久的代理密钥。我

  • When considering portability between databases, another important decision is selecting the identifier generation stratagy you want to use. Originally Hibernate provided the native generator for this

  • 带注释的类中的followig代码可用于两个数据库的自动键生成,但如果主键是自设置的,则会失败。 如果没有@GeneratedValue和@SequenceGenerator注释,则可以手动设置主键,但自动生成无法工作。