什么是Id

最近从别人手里接过一个功能点,table的Id(long),居然是当前时间的毫秒数值与playerId做String拼接组成的,playerId是另一个Entity的Id(long)。

在测试阶段一直都没问题,但是上线之后就出问题了。

String newId = String.valueOf(playerId)+String.valueOf(System.currentTimeMillis());
 

日期的long值+playerId之后,存储类型为string。

上面的string值,在Long.parseLong(value)的时候,出现了NumberFormatException。

 

那么,现在,我们来看看原因到底是为何。

long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)。

当前时间的毫秒数值:1316223521431;

已经很长了一旦playerId达到7位数,那么,结果不言而喻!!!

 

Exception in thread "main" java.lang.NumberFormatException: For input string: "25430051316162482222"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Long.parseLong(Long.java:422)
	at java.lang.Long.parseLong(Long.java:468)
	at org.test.core.AppMain.main(AppMain.java:88)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值