В моем приложении я моделирую счет-фактуру. В моей стране (Италия) каждый счет-фактура должен иметь уникальный последовательный номер без отверстий, который каждый год должен перезапускать с 1.Spring JPA с формированием фискальной последовательности Hibernate
Я долго и долго думал о лучшем способе его реализации, но я не нашел хорошего гида об этом. На данный момент у меня есть JpaRepository
где я мой заказ синхронизированный save()
метод, в котором я получаю последний идентификатор, используемый:
SELECT MAX(numero) FROM Invoice WHERE YEAR(date) = :year
Проблема этого подхода заключается в том, что это не очень безопасно, потому что разработчик должен знать, что сохранить следует делать только с этой конкретной услугой.
Вместо этого я хотел бы больше подхода, который скрыт от разработчика. Я думал использовать метод @Prepersist
в @EntityListeners
. Это звучит хорошо, но получаете менеджер сущностей внутри этого класса не так просто .... поэтому, возможно, не является оптимальным местом ...
Наконец-то я думал о спящем перехватчик ....
Пожалуйста, дайте мне некоторые намеки. Проблема кажется довольно общей проблемой; так что, возможно, еще есть хорошая практика.
Благодаря
Существует еще одна проблема с использованием метода 'synchronized'. Синхронизация работает в рамках одной JVM, а не через JVM. Итак, если вы масштабируетесь в кластере, каждая JVM будет иметь свой собственный «синхронизированный» метод, но между ними не будет никакой синхронизации. – manish