Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当registrationNo为字符串时,`Projections.max(";registrationNo";)将如何工作_Java_Mysql_Hibernate - Fatal编程技术网

Java 当registrationNo为字符串时,`Projections.max(";registrationNo";)将如何工作

Java 当registrationNo为字符串时,`Projections.max(";registrationNo";)将如何工作,java,mysql,hibernate,Java,Mysql,Hibernate,我有一个名为StudentDetails的实体。其中有一个字符串类型的字段RegistrationNo。我的客户机遵循类似xxxxx-xxxx(序列号00000到10000)-(当前年份号)的模式。要在此模式中存储注册号,我们将其声明为字符串。每次新学员加入时,我们必须增加序列号,我们必须存储它 我在不知道它存储为字符串的情况下尝试使用Projections.max(“registrationNo”)获取最后一个数字,幸运的是,它返回了max number,我不知道如何返回。但当序列号达到6位数

我有一个名为
StudentDetails
的实体。其中有一个字符串类型的字段
RegistrationNo
。我的客户机遵循类似xxxxx-xxxx(序列号00000到10000)-(当前年份号)的模式。要在此模式中存储注册号,我们将其声明为字符串。每次新学员加入时,我们必须增加序列号,我们必须存储它

我在不知道它存储为字符串的情况下尝试使用
Projections.max(“registrationNo”)
获取最后一个数字,幸运的是,它返回了max number,我不知道如何返回。但当序列号达到6位数字(如xxxxxx-xxxx)时,问题再次出现,然后
Projections.max(“registrationNo”)
没有返回6位数字。它最多只返回5位数字

投影如何返回最多5位数字而不是6位数字


顺便说一句,我用记录的id来知道最后的
RegistrationNo
,解决了这个问题。但是
Projections.max(“RegistrationNo”)
让我困惑了一段时间它是如何工作的。

如注释中所述,这个问题很可能是字符串比较,即调用
max()
对字符串类型的属性执行操作将返回“最大”字符串值,即使这些字符串表示数字

字符串比较通常是通过从头到尾比较字符来完成的,直到出现差异或到达一个输入字符串的末尾(在这种情况下,越长的字符串越大)

因此,只要序列号的长度相等,它就应该起作用,因为比较
10000
00001
将得到比较的“正确”字符

但是,一旦字符串长度不同,正常的字符串比较将不再有效,因为字符确实代表不同的数字。因此,将
98765
123456
进行比较将导致
98765
更大,因为要比较的第一个字符几乎总是
1
9
以及
1<9
(除非您以某种方式更改)

要解决这个问题,您可以根据您的环境和目标采取以下几条路线:

  • 将序列号存储在单独的数字属性中
  • 使序列字符串从一开始就更长,即允许更大的范围
  • 在代码或数据库中添加一个专门的比较器(作为提示,我必须查找如何执行)

从性能的角度来看,我可能会选择第一条路线。

如果您的属性是字符串(我认为这是由于格式问题)
max
将进行字符串比较。所以
1000000
将小于
2
,因为
1<2
@Thomas那么01000将如何大于00002..这是因为
1>0
。字符串比较将比较字符,即,如果您比较
010
002
,它将实际比较
0
0
,然后比较
1
0
,因为它们是不同的,比较将停止。哦..明白了..当位数相同时,它将起作用。如果位数改变,则它将不起作用..谢谢..将您的评论作为答案发布,我将接受它。