Spring Boot и Hibernate Dynami c Генератор идентификаторов для номера счета - PullRequest
2 голосов
/ 30 мая 2020

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

YEAR/MONTH/Number(Will Increase)

Приведенная выше последовательность зависит от даты счета.

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

Я попытался использовать генератор последовательности, генератор таблиц. Мой фрагмент кода выглядит следующим образом:

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

Но я не понимаю, как сделать его зависимым от даты счета-фактуры. Мой генератор ниже:

public class CustomGenerator  implements IdentifierGenerator { 

    @Override
    public Serializable generate(SharedSessionContractImplementor sessionImpl, Object data)
    throws HibernateException {
        Serializable result = null;
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            String prefix = "";

            DateTimeFormatter newPattern = DateTimeFormatter.ofPattern("yyyyMM"); 

            LocalDate ldObj = LocalDate.now();
            String yyyymm = newPattern.format(ldObj).toString();
            prefix = "INV/"+yyyymm+"/";
            connection = sessionImpl.connection();
            statement = connection.createStatement();                   
             try {  
                 resultSet = statement.executeQuery("select max(id)+1 from invoice");
             } catch(Exception ex) {

             }

            if(resultSet.next()) {
                int nextValue = resultSet.getInt(1);                
                String suffix = String.format("%05d", nextValue + 1);               
                result = prefix.concat(suffix);
                System.out.println("Custom generated Sequence value : "+result);
            } else
            {
                 int nextValue = 1;                
                 String suffix = String.format("%05d", nextValue + 1);               
                 result = prefix.concat(suffix);    
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return result;
    }


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