Hibernate中的自定义序列应该每年重置一次

时间:2011-05-17 11:30:44

标签: hibernate sequence

我正在研究使用Spring MVC 3和hibernate 3的简单应用程序。

我需要以下列格式生成ID。

Month/Year/number(number will increase). 

月份和年份值会根据当前日期进行更改。 一旦完成一年,就说在一个财政年度完成后,序列再次从头开始,如月/年/数字。希望我很清楚。

示例:

1st Financial Year:
Mar/2011/001
Jun/2011/002
Dec/2011/003
Feb/2011/004
...
...

2nd Financial Year:
Mar/2012/001
Mar/2012/002
Aug/2012/003
..
..
..

我该如何处理这个问题? 请帮帮我。

2 个答案:

答案 0 :(得分:1)

创建自定义序列生成器。您需要在某处保存一条记录,该记录存储最后保存的记录的年份。每次想要生成新标识符时,请检查该值,如果保存的最后一条记录不是来自今年,则更新该值并重新创建下面使用的序列。如果该值尚未设置,您可以计算它查询最新记录的日期。

有点伪代码:P

public class CustomSequenceGenerator extends SequenceStyleGenerator {

    private static Integer lastYear = null;

    public CustomSequenceGenerator (){
        super();
    }

    @Override
    public Serializable generate(SessionImplementor sessionImplementator, Object object) throws HibernateException {
        Long id = (Long)super.generate(sessionImplementator, object);
        if (lastYear == null) {
            getYearOfLastRecord();
        }
        if (lastYear != getThisYear() ) {
           recreateDatabaseSequence();
           lastYear = getThisYear();
        }
        String date = generateStringBasedOnDate();
        return date+id.toString;
    }

// Implement missing methods

[....]
}

答案 1 :(得分:0)

查看here in the hibernate docs提供的各种选项。

这是related stackoverflow thread

最后,您的实现必须从此hibernate interface派生,然后您可以在generate方法中实现自定义逻辑。