【发布时间】:2019-02-19 11:56:00
【问题描述】:
我正在尝试制作一个小型 Spring Boot 服务,它接收一个参数,然后查询将对句子中的每个单词应用一个赞。我想知道为什么会这样:
@GetMapping("/getAll")
//@CrossOrigin(origins = "http://localhost:4200")
private List<PersonaNegativa> getAll(){
List<PersonaNegativa> listneg = new ArrayList<PersonaNegativa>();
try {
listneg = entityManager
.createQuery("select p from PersonaNegativa p where p.NombreCompletoFonetico like '%ARKRP%' "
+ "or p.NombreCompletoFonetico like '%ARLNS%'",
PersonaNegativa.class).getResultList();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return listneg;
}
但事实并非如此。
@GetMapping("/getNombre/{nom}")
private List<PersonaNegativa> getByNombre(@PathVariable String nom){
DoubleMetaphone dm = new DoubleMetaphone();
dm.setMaxCodeLen(5);
String[] nomarray = nom.split(" ");
String nomconvertido = "";
for(int i = 0; i<=nomarray.length-1; i++) {
if(i< nomarray.length-1) {
nomconvertido += "%" + dm.doubleMetaphone(nomarray[i])+ "% or p.NombreCompletoFonetico like ";
}
else {
nomconvertido += "%" +dm.doubleMetaphone(nomarray[i]) + "%";
}
}
System.out.println(nomconvertido);
List<PersonaNegativa> listneg = new ArrayList<PersonaNegativa>();
try {
listneg = entityManager
.createQuery("select p from PersonaNegativa p where p.NombreCompletoFonetico like :nom",
PersonaNegativa.class)
.setParameter("nom", nomconvertido).getResultList();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return listneg;
}
}
当打印“nomconvertido”时,我得到:“%ARKRP% or p.NombreCompletoFonetico like %ARLNS%”
它应该给出与上面测试相同的结果,所以我想知道为什么它不同。
【问题讨论】:
-
所以去看看实际调用的 SQL(在 JPA 提供程序日志中),你会更好地理解
标签: java sql hibernate spring-boot jpa