鍍金池/ 問(wèn)答/Java  網(wǎng)絡(luò)安全/ SpringJPA的Sort如何對(duì)帶有下劃線的字段排序?

SpringJPA的Sort如何對(duì)帶有下劃線的字段排序?

各位前輩,第一次用SpringJPA?,F(xiàn)在實(shí)體類有一個(gè)字段是這樣的:

    private String movie_id;

而我想通過(guò)這個(gè)字段排序,繼承PagingAndSortingRepository后,代碼為:

    Sort sort = new Sort(Sort.Direction.DESC,"movie_id");
    Pageable pageable = PageRequest.of(0,PAGE_LIMIT,sort);
    Page<MovieInfo> movieInfopage = movieInfoRepository.findAll(pageable);
    

可是報(bào)錯(cuò)了:

org.springframework.data.mapping.PropertyReferenceException: No property movie found for type MovieInfo!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:92) ~[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:356) ~[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]

手動(dòng)改movie_id為movieId后即可操作。
那肯定是框架無(wú)法識(shí)別下劃線 ....
前輩們咋辦!可以不用大改字段名么?

回答
編輯回答
陌南塵

通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)了,bean中的字段可以定義為駝峰,通過(guò)hibernate的命名策略可以自動(dòng)把駝峰轉(zhuǎn)化為下劃線,然后Sort中需要的其實(shí)是bean中的字段。例如定義為movieId,數(shù)據(jù)會(huì)自動(dòng)轉(zhuǎn)為movie_id,然后會(huì)根據(jù)bean的字段也就是movieId去排序。

2017年5月28日 00:52
編輯回答
舊螢火

首先,java field應(yīng)該用camel case,一開(kāi)始就不應(yīng)該用下劃線。再說(shuō)你這個(gè)問(wèn)題,根據(jù)spring文檔,下劃線是保留字段:“As we treat underscore as a reserved character we strongly advise to follow standard Java naming conventions (i.e. not using underscores in property names but camel case instead).”兩個(gè)解決方案:
1.movie_id改成movieId

  1. 試試兩個(gè)下劃線escape掉下劃線,Sort sort = new Sort(Sort.Direction.DESC,"movie__id");
2017年11月3日 15:08