首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA:并发序列

JAVA:并发序列
EN

Stack Overflow用户
提问于 2018-03-28 17:52:29
回答 2查看 207关注 0票数 1

在我的应用程序中,我有一个表来存储用户信息,如姓名、地址、类型(员工、经理、管理员)、UniqueNumber。

我需要为表User中的每个记录在字段UniqueNumber中存储一个介于1和100之间的序列号,表示类型:因此可以存在一个类型= 'Employee‘和UniqueNumber=1的记录,以及一个类型=’经理‘和UniqueNumber=1的记录,但不能存在另一个类型=’Employee‘和UniqueNumber=1的记录。

我在考虑为每种类型使用一个数据库序列。这有助于我管理并发,其中可以同时向更多用户插入一条记录。

这是一个好的解决方案吗?有没有别的选择?

我看到了AtomicInteger类,但我不知道如何对我的表的每一种类型使用它。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 18:08:44

AtomicInteger只是提供了Integer值的线程安全使用。您的问题与Java没有什么关系,除非您在一次遍历中创建了每个用户实体。如果是这种情况,您可以声明3个int值,并为要创建的每个实体递增它们(如果需要处理并发,则可以声明3个静态或本地AtomicInteger值)。最好的方法是为每个类型创建一个序列,或者使用Max查询获取给定类型的下一个可用值。-->视您的需要而定

当一个类型的值超过100个时会发生什么?

票数 1
EN

Stack Overflow用户

发布于 2018-03-28 18:21:59

我们可以在java中创建这样的代码,但这是不必要的复杂。它涉及到MapAtomicInteger(),并且您会经常使用incrementAndGet()方法。

另一方面,您可以创建两个表。一个是给UserTypes的,另一个是给用户的。然后,users表可以具有类型的外键。在数据库级别上解决了问题。这很酷,因为数据库将强制执行此约束。

以下是使用MS SQL Server执行此操作的方法:

代码语言:javascript
复制
CREATE TABLE UserTypes (
  ID INT Identity(1, 1) NOT NULL,
  TypeName VARCHAR(128) NOT NULL,
  PRIMARY KEY (ID)
)

CREATE TABLE Usr (
  ID INT Identity(1, 1) NOT NULL,
  TypeId INT NOT NULL,
  MoreData VARCHAR(256) NULL,
  CONSTRAINT fk_types FOREIGN KEY (TypeId) REFERENCES UserTypes (ID)
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49531385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档