Пользовательская последовательность в Hibernate, которая должна сбрасываться ежегодно - PullRequest
1 голос
/ 17 мая 2011

Я работаю над простым приложением, которое использует Spring MVC 3 и Hibernate 3.

У меня есть требование для генерации идентификатора в следующем формате.

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 ]

1 голос
/ 17 мая 2011

Создать генератор пользовательских последовательностей. Вам нужно будет где-то хранить запись, в которой хранится год последней сохраненной записи. Каждый раз, когда вы хотите создать новый идентификатор, проверяйте это значение и, если последняя сохраненная запись не из этого года, обновите это значение и заново создайте последовательность, используемую ниже. Если это значение еще не установлено, вы можете рассчитать его, запрашивая дату самой новой записи.

Немного псевдокода: 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

[....]
}
0 голосов
/ 17 мая 2011

Посмотрите на различные опции, предоставленные здесь, в документах гибернации .

Вот поток , связанный с * stackoverflow .

Наконец, ваша реализация будетнеобходимо извлечь из этого спящего интерфейса , а затем вы можете реализовать свою собственную логику в методе создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...