在我的应用中,我正在建立一个发票模型。在我的国家(意大利),每张发票必须有一个唯一的连续编号,不能有空缺,并且每年必须从1开始重新计数。
我反复思考了如何最好地实现它,但是我没有找到关于这个问题的好指南。目前,我有一个
这种方法的问题在于不太安全,因为开发人员应该知道只有使用特定服务才能进行保存。
相反,我更喜欢一种对开发人员隐藏的方法。 我考虑在
最后,我想到了Hibernate拦截器...
请给我一些提示。该问题似乎是一个相当通用的问题;因此可能已经有一个好的实践方法可供遵循。
谢谢
我反复思考了如何最好地实现它,但是我没有找到关于这个问题的好指南。目前,我有一个
JpaRepository
,其中包含我自定义的同步save()
方法,在该方法中我获取了上一个使用的ID。SELECT MAX(numero) FROM Invoice WHERE YEAR(date) = :year
这种方法的问题在于不太安全,因为开发人员应该知道只有使用特定服务才能进行保存。
相反,我更喜欢一种对开发人员隐藏的方法。 我考虑在
@EntityListeners
中使用@Prepersist
方法。这听起来不错,但在该类中获取实体管理器并不那么简单...所以也许不是最佳位置...最后,我想到了Hibernate拦截器...
请给我一些提示。该问题似乎是一个相当通用的问题;因此可能已经有一个好的实践方法可供遵循。
谢谢
synchronized
方法还存在另一个问题。同步在单个JVM内有效,而不跨越JVM。因此,如果您扩展到集群中,每个JVM将拥有自己的synchronized
方法,但它们之间不会进行任何同步。 - manish