(java,oracle)web系统如何生成20091200001,20091200002这样的序列号,有多个用户同时操作。
答案:3 悬赏:70 手机版
解决时间 2021-04-16 03:35
- 提问者网友:我是女神我骄傲
- 2021-04-15 16:51
J2EE项目,有个表主键需要产生20091200001,20091200002这样的序列号。该如何实现?目前我做的是:添加一条新纪录的时候是查找数据库编号最大的,之后加1。但是当有两个用户在不同机子上同时添加记录的时候会从数据库查到相同的编号,这样其中一个用户保存这条数据后,另外一个用户就保存不了了。请教这个该如何实现。还有就是oracle可以设置自动产生这样序列号主键吗?
最佳答案
- 五星知识达人网友:野慌
- 2021-04-15 17:28
假设 id 为序列值
select to_char(sysdate,'yyyymm')||substr('00000',0,5-length(id))||id into result_id from dual;
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-04-15 19:43
J2EE项目中我们不期望项目依赖于某个特定的数据库。如果需要更换数据库,会面临重构代码的窘境。此外持久化时,表的ID最好不是自然键,即主键值最好不要包含业务逻辑(比如楼主所说的时间)。如果一张表中一定需要创建日期的话,可以增设日期字段。
生成id,推荐使用已有的主键生成策略,如:uuid等等。
具体实现方法:如: @Id @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid", strategy="uuid") @NotNull private String id;
当然我们需要:import javax.persistence.Column;import javax.persistence.GeneratedValue;import javax.persistence.Id;
- 2楼网友:举杯邀酒敬孤独
- 2021-04-15 19:05
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯