Я работаю над приложением загрузки 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;
}
}