日期:2014-05-18 浏览次数:20724 次
private static long sequenceId = System.currentTimeMillis(); public static long getNextId() { return sequenceId++; }
------解决方案--------------------
在配置文件里写个最大单据号,用的时候读出来直接加1.
------解决方案--------------------
自己写个算法,时间+IP..
------解决方案--------------------
不赞成主键和业务挂钩
但是楼主这种情况,
可以使用时间+业务键的方式
业务键可以是操作员id
同一毫秒,一个操作员应该不可能操作2个业务
------解决方案--------------------
足够长的位 offset from the Epoch in milliseconds 本身就是不重复的了
再加上一些无关紧要的业务信息
------解决方案--------------------
IP+时间+序列号(从一到xx的递增数字号)
个人建议.
------解决方案--------------------
用时间做ID号,就肯定不会重复了,要不再加上一些自己的数字,支持楼上的各位.
------解决方案--------------------
好的解决方案 大家都基本上已经讲解过了。我只有学习了
------解决方案--------------------
RandomStringUtils.randomAlphanumeric(21) + DateFun.DateByFormat(new Date(), "yyyyMMddHHmmsssss");
21位的随机字母加上毫秒级时间,我就不信会重
------解决方案--------------------
我觉得用这条记录的id+系统的当前时间就可以吧 应该很难碰到重复的 呵呵 我一直这么用
------解决方案--------------------
更精确点的话用纳秒吧 System.nanoTime();
------解决方案--------------------
个人理解
不建议上面的说法
对于流水号的问题只需要唯一标识就可以了
没有必要经过时间、IP等拼凑获得、更不建议使用数据库的自增
最好是使用随机数,思想类似于hibernate中UUID
java中同样有VMID可以获得唯一的随机数这个随机数在网络中重复的几率几乎为0
肯定可以满足你的需求