我有一个JSF / JPA应用程序,其中有20多个用户登录系统并生成Bill类型实体。这些新生成的实体需要具有部门和帐单类型唯一的帐单号。
帐单类型示例(来自枚举)
Opd
Payment
Inward
部门类型示例(用户输入几乎无限数量的部门)
Ruhuna
Coop
Arogya
票据编号示例
Ruhuna/Opd/001
Ruhuna/Opd/002
Ruhuna/Payment/001
Coop/Opd/001
Ruhuna/Opd/003
Coop/Payment/001
我在一个名为Bill的实体中记录所有账单。 目前我使用应用程序范围JSF Controller(带有@Named注释)来检查BillType和Department作为参数传递后的Bills总数。我在计数中添加一个,并将BillType和Department Code的前缀添加到计数中以生成BillNo。添加账单号后不久,我坚持新创建的账单。
问题在于,如果两个用户同时从同一部门和同一账单类型结算账单,则BillNumber会重复。例如,可能有两个Ruhunu / Opd / 21300,第三个账单将作为Ruhunu / Opd / 21302。所以Ruhunu / Opd / 21301账单号丢失了。 错误示例
Ruhunu / Opd / 21300(与第二张账单同时结算。) Ruhunu / Opd / 21300(与第一张账单同时收费。) Ruhunu / Opd / 21302(Thired Bill)
绝对有必要防止生成重复号码,因为在实际设置中使用该号码来追踪账单并进行取消,退款,付款等。
请建议一种生成多个序列号的方法,以避免重复。
提前致谢。
Technical Details
Application Server - GlassFish 3.1.2.2
Persistence Provider - EclipseLink 2.5 (used with all possible caching methods, still failed.)
Database - MySQL
Number of Application Instances - One
Clustering of Application Servers - Not at this moment
Clustering of Database - Not at this moment