日期前缀自动增量id在JPA + Hibernate中

时间:2016-03-02 18:46:36

标签: java mysql hibernate jpa auto-increment

我必须生成一个自定义自动增量,它在每天00:00重置为日期前缀自动增量值

例如2016年1月9日,id应该在1601090001到1601099999的范围内, 2016年12月15日t应该是1612150001到1612159999。

例如:1612150001的特征如下

  
      
  1. id是INT
  2.   
  3. 前两位数表示年份,16表示2016年
  4.   
  5. 数字3和4表示月份,
  6.   
  7. 5和6代表日期
  8.   
  9. 并且只是一个计数器,所以我希望我们在一天内生成的记录少于9999条。
  10.   

如何在JPA中实现这一目标,最好的方法是什么,目前我使用另一个表来计算当前值并使用上次更新的时间和当前时间来计算前缀并将自动增量部分决定为重置为1或不重置。我认为这不是一个正确的解决方案。

有没有办法可以将@GeneratedValue注释与自定义策略一起使用,如果是这样,我怎么能在不导致错误的情况下做到这一点,因为它无法生成ID。

1 个答案:

答案 0 :(得分:0)

我找到了两个可以解决问题的方法

您可以使用休眠@GenericGenerator注释并创建自定义序列生成器。有example in this SO answer

您还可以使用JPA @PrePersist注释。

@PrePersist
public void getNextIdFromGenerator() {
   id = yourInjectedGeneratorOrSomething.nextId(); 
}