我有一个名为StudentDetails.In的实体,其中有一个类型为String.My client的字段RegistrationNo,它遵循一个模式,如xxxxx-xxxx (编号为00000到10000)-(当前年份号).To Store RegistrationNo,在此模式中,我们宣布它是随着String.Every时间的加入而声明的,我们必须增加存储它的序列号。
在不知道它存储为字符串的情况下,我尝试使用Projections.max("registrationNo")获取最后一个数字,幸运地,它返回了最大值,当序列号达到6位时,如xxxxxx xxxx,则Projections.max("registrationNo")没有返回6位数字,number.It只返回5位数字的最大值。
如何投影返回5位数的最大值,而不是6位数的。
顺便说一下,我解决了这个问题,用记录的id来知道上一次RegistrationNo.But Projections.max("registrationNo")是如何工作的,这让我困惑了一段时间。
发布于 2015-11-24 12:57:02
正如注释中已经指出的,问题很可能是字符串比较,即对string类型的属性调用max()将导致返回“最大值”字符串值,即使这些字符串表示数字。
字符串比较通常通过从开始到结束对字符进行比较,直到出现差异或到达一个输入字符串的末尾(在这种情况下,较长的字符串将是更大的字符串)。
因此,只要您的序列号具有相同的长度,它就应该工作,因为比较10000和00001将导致比较“正确”字符。
但是,一旦字符串长度不同,正常的字符串比较就不再起作用了,因为字符表示不同的数字。因此,将98765与123456进行比较将导致98765更大,因为要比较的第一个字符几乎一直都是1、9和1 < 9 (除非您以某种方式改变了这一点)。
要解决这个问题,您可以选择几条取决于您的环境和目标的路线:
从性能的角度来看,我可能会选择第一条路线。
https://stackoverflow.com/questions/33893747
复制相似问题