javaweb项目中在自动生成随机数时只能生成一次是为什么啊?必须重启服务才能再生成。求解

xm_love_jaejoong 发布于 2013/11/07 09:43
阅读 418
收藏 0
我要注册一个账号,id是让他自动生成的,然后再jsp页面中有用户名和密码。然后我在注册的时候,第一次能注册成功,id也能生成,但在第二次注册的时候,能注册成功,但把第一次注册的用户给覆盖了,而且id号和第一次是一样的,为什么啊?但如果我重新启动服务器的话,能正常生成。所以我如果要注册几个不同的账号,每注册一次,都要重启一次服务,这是为什么啊?求解。在线等。
加载中
0
guor
guor
这个得看你在哪里生成ID的,如何生成的,以及ID生成以后干了什么
x
xm_love_jaejoong
我是一开始创建对象的时候就让他直接生成的 private long id= (long)(Math.random()*90000+10000);
0
guor
guor

引用来自“lietome”的答案

这个得看你在哪里生成ID的,如何生成的,以及ID生成以后干了什么
哦,这只是写法的问题哈,你那么写,只是在创建对象后初始化属性 id 的时候,才生成一次随机 id,应该动态获取
public long getId() {
	return (long) (Math.random() * 90000 + 10000);
}
0
MrZQ
MrZQ
怎么不用GUID呢,永远不会重复。随机数的话,就按照楼上的写法。
MrZQ
MrZQ
回复 @xm_love_jaejoong : UUID uuid = UUID.randomUUID();
x
xm_love_jaejoong
我没接触过GUID,我是刚学java的
0
x
xm_love_jaejoong

HTTP Status 500 - identifier of an instance of com.study.pojo.Account was altered from 12029 to 27518; nested exception is org.hibernate.HibernateException: identifier of an instance of com.study.pojo.Account was altered from 12029 to 27518

我按照你说的改了之后 出现上面问题 是什么意思啊

guor
guor
你这个显然是错误的做法哈,不知道你将Account对象保存在哪里的,怎么每次都是用的同一个?
0
爱生活_爱JAVA
爱生活_爱JAVA

UUID.randomUUID()

改了用这个吧,uuid java里自带的,不会重复

每1秒钟产生100 个 ,一百年后才能有一个重复的

0
QAllen
QAllen
你放的这个对象中的属性值 已经确定了,访问的没有重新new。
QAllen
QAllen
生成id的这个方法可以写成一个公共方法,然后setId 进去。
x
xm_love_jaejoong
那怎么改啊
0
DW_GYT
DW_GYT
如果怕ID重复,可以用当前时间来完善生产规则,这样保证ID是唯一的
x
xm_love_jaejoong
不是怕id会重复,感觉是代码哪边有问题,只要重启服务id才会变
返回顶部
顶部