【问题标题】:JPA/Hibernate primary key value sequence using current year使用当前年份的 JPA/Hibernate 主键值序列
【发布时间】:2013-02-27 08:32:49
【问题描述】:

我正在使用 Spring 3 和 Hibernate 4

我在实体类中有以下内容

    @Id
    @Column(name = "PROJECT_NO")
    private String projectNumber;

当我在数据库表中插入值时,是否可以插入 PROJECT_NO 值,它是以下格式的主键

20131 其中 2013 是当前年份,下一个字符应递增 1。即下一个要插入的值应该是20132

如何使用 JPA/Hibernate 实现这一目标

【问题讨论】:

    标签: java spring hibernate jpa-2.0


    【解决方案1】:

    您必须查看@GeneratedValue@GenericGenerator 注释。

    产生价值的可能性有多种。在您的情况下,我相信您需要创建如下内容:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "year_gen")
    @GenericGenerator(name = "year_gen", strategy = "com.example.generator.CustomGenerator")
    @Column(name = "PROJECT_NO")
    private String projectNumber;
    

    CustomGenerator 应该实现org.hibernate.id.IdentifierGenerator

    【讨论】:

    • 我会尝试这种策略类的方法。谢谢 n1ckolas
    • 在你尝试过并且(如果)它有效之后,一定要检查这个作为答案!
    • @n1ckolas 给点时间,我还没试过。一旦我会尝试,我会告诉你。谢谢
    【解决方案2】:

    把JPA注解放在getter上,用getter方法随意格式化数据怎么样?

    @Entity
    public class MyClass {
     private String projectNumber;
    
     @Column(name = "PROJECT_NO")
     public String getProjectNumber(){
      return doSomeFormatting(this.projectNumber);
     }
    }
    

    类似的东西应该可以。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 2019-04-29
      • 2011-02-18
      • 2012-09-02
      • 2012-10-30
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      相关资源
      最近更新 更多