参数值 [%Gabrek%] 与预期类型不匹配 [java.lang.Character (n/a)];
Parameter value [%Gabrek%] did not match expected type [java.lang.Character (n/a)];
我一直在使用 JPA 在 Spring Boot Web 中编写一个程序,我正在使用一个查询来访问带有 'contains' 和 'ignorecase' 过滤器的一些数据,我以前在其他程序中做过这个并且工作正常,但现在我收到这个错误,我在这一点上完全迷路了,因为我在 google 中找不到任何东西,我走得很远寻找它发生的原因的兔子洞,到目前为止,我在我的代码中没有看到任何不合适的地方,声明的变量类型似乎没问题,但正如我所说,我迷路了。重要的是要提到,出于某种原因,当我第一次在我的网站上进行查询时,一切正常,我得到了正确的结果,但是当我回到家并尝试另一个查询(甚至是相同的)我得到了错误。代码如下:
型号
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Serie {
@Id
@Column(columnDefinition = "NUMERIC(19,0)")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String red;
@Column(columnDefinition = "NUMERIC(19,0)")
private double rating;
存储库
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import cl.desafiolatam.imdb.modelo.Serie;
public interface SerieRepository extends JpaRepository<Serie, Integer> {
public List<Serie> findByTitleContainingIgnoreCase(String title);
}
服务
import cl.desafiolatam.imdb.vo.SerieVO;
public interface SerieService {
public SerieVO findByTitleContainingIgnoreCase(String title);
}
服务实施
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cl.desafiolatam.imdb.dao.SerieRepository;
import cl.desafiolatam.imdb.modelo.Serie;
import cl.desafiolatam.imdb.service.SerieService;
import cl.desafiolatam.imdb.vo.SerieVO;
@Service
public class SerieServiceImpl implements SerieService {
private static final Logger logger = LoggerFactory.getLogger(SerieServiceImpl.class);
@Autowired
SerieRepository dao;
SerieVO respuesta;
@Override
@Transactional(readOnly = true)
public SerieVO findByTitleContainingIgnoreCase(String title) {
respuesta = new SerieVO("Ha ocurrido un error!", "104", new ArrayList<Serie>());
try {
List<Serie> serie = dao.findByTitleContainingIgnoreCase(title);
System.out.println(serie);
if(serie.size() > 0) {
respuesta.setSeries(serie);
respuesta.setMensaje("Se ha encontrado el registro");
respuesta.setCodigo("0");
} else {
respuesta.setMensaje("No se ha encontrado el registro");
respuesta.setCodigo("104");
}
} catch (Exception e) {
logger.error("Error al buscar la serie", e);
}
return respuesta;
}
}
视觉对象
import java.util.List;
import cl.desafiolatam.imdb.modelo.Serie;
public class SerieVO extends GenericVO {
List<Serie> series;
public SerieVO(String mensaje, String codigo, List<Serie> series) {
super(mensaje, codigo);
this.series = series;
}
public SerieVO() {
super();
}
控制器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import cl.desafiolatam.imdb.modelo.Serie;
import cl.desafiolatam.imdb.service.SerieService;
import cl.desafiolatam.imdb.vo.SerieVO;
@Controller
public class SerieController {
private final static Logger logger = LoggerFactory.getLogger(SerieController.class);
@Autowired
private SerieService svc;
@GetMapping("/buscarSerie")
public ModelAndView buscarSerie(Model model, @RequestParam String nombreSerie) {
SerieVO respuestaServicio = new SerieVO();
respuestaServicio.setMensaje("No se ha encontrado la serie");
try {
respuestaServicio = svc.findByTitleContainingIgnoreCase(nombreSerie);
model.addAttribute("listaSeries", respuestaServicio.getSeries());
return new ModelAndView("resultadoserie");
} catch (Exception e) {
logger.error("Error al buscar la serie", e);
}
return new ModelAndView("redirect:/user");
}
}
搜索输入
<div class="d-flex justify-content-center pb-2">
<div class="container row">
<div class="col-md-4">
<div class="d-flex justify-content-center">
<h2>Buscar serie</h2>
</div>
</div>
<div class="col-md-8">
<form action="buscarSerie" method="get">
<div class="row g-2">
<div class="col-md">
<div class="form-floating">
<input type="text" class="form-control" id="floatingInputGrid"
value="" name="nombreSerie" required> <label
for="floatingInputGrid">Serie</label>
</div>
</div>
</div>
<div class="d-flex justify-content-center pt-4">
<input type="submit" class="btn m-2 btn-dark" value="Buscar" />
</div>
</form>
</div>
</div>
</div>
正如我所说,我真的迷路了,到处研究,并检查了我上一个项目中的代码,我就是找不到为什么这个让我这么脏。甚至一开始就不会失败,它让我看到了希望,当我想重试时,它粉碎了那一点点希望。 :)
我尝试删除我的代码并从我知道它按预期工作的项目中复制和粘贴,更改变量和参数。名称以使其与新程序一起使用但没有用。并排比较,尝试使用 @Query 编写特定指令。寻找信息。仅使用 'contains' 过滤器,但没有任何效果。
根据 Spring Data JPA issue #2472 这似乎是 Hibernate 5.6.6 和 5.6.7 中的一个问题。
Hibernate 错误是 HHH-15142。
解决方案是降级到 Hibernate 5.6.5 或等待 Hibernate 补丁来解决此问题。
我一直在使用 JPA 在 Spring Boot Web 中编写一个程序,我正在使用一个查询来访问带有 'contains' 和 'ignorecase' 过滤器的一些数据,我以前在其他程序中做过这个并且工作正常,但现在我收到这个错误,我在这一点上完全迷路了,因为我在 google 中找不到任何东西,我走得很远寻找它发生的原因的兔子洞,到目前为止,我在我的代码中没有看到任何不合适的地方,声明的变量类型似乎没问题,但正如我所说,我迷路了。重要的是要提到,出于某种原因,当我第一次在我的网站上进行查询时,一切正常,我得到了正确的结果,但是当我回到家并尝试另一个查询(甚至是相同的)我得到了错误。代码如下:
型号
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Serie {
@Id
@Column(columnDefinition = "NUMERIC(19,0)")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String red;
@Column(columnDefinition = "NUMERIC(19,0)")
private double rating;
存储库
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import cl.desafiolatam.imdb.modelo.Serie;
public interface SerieRepository extends JpaRepository<Serie, Integer> {
public List<Serie> findByTitleContainingIgnoreCase(String title);
}
服务
import cl.desafiolatam.imdb.vo.SerieVO;
public interface SerieService {
public SerieVO findByTitleContainingIgnoreCase(String title);
}
服务实施
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cl.desafiolatam.imdb.dao.SerieRepository;
import cl.desafiolatam.imdb.modelo.Serie;
import cl.desafiolatam.imdb.service.SerieService;
import cl.desafiolatam.imdb.vo.SerieVO;
@Service
public class SerieServiceImpl implements SerieService {
private static final Logger logger = LoggerFactory.getLogger(SerieServiceImpl.class);
@Autowired
SerieRepository dao;
SerieVO respuesta;
@Override
@Transactional(readOnly = true)
public SerieVO findByTitleContainingIgnoreCase(String title) {
respuesta = new SerieVO("Ha ocurrido un error!", "104", new ArrayList<Serie>());
try {
List<Serie> serie = dao.findByTitleContainingIgnoreCase(title);
System.out.println(serie);
if(serie.size() > 0) {
respuesta.setSeries(serie);
respuesta.setMensaje("Se ha encontrado el registro");
respuesta.setCodigo("0");
} else {
respuesta.setMensaje("No se ha encontrado el registro");
respuesta.setCodigo("104");
}
} catch (Exception e) {
logger.error("Error al buscar la serie", e);
}
return respuesta;
}
}
视觉对象
import java.util.List;
import cl.desafiolatam.imdb.modelo.Serie;
public class SerieVO extends GenericVO {
List<Serie> series;
public SerieVO(String mensaje, String codigo, List<Serie> series) {
super(mensaje, codigo);
this.series = series;
}
public SerieVO() {
super();
}
控制器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import cl.desafiolatam.imdb.modelo.Serie;
import cl.desafiolatam.imdb.service.SerieService;
import cl.desafiolatam.imdb.vo.SerieVO;
@Controller
public class SerieController {
private final static Logger logger = LoggerFactory.getLogger(SerieController.class);
@Autowired
private SerieService svc;
@GetMapping("/buscarSerie")
public ModelAndView buscarSerie(Model model, @RequestParam String nombreSerie) {
SerieVO respuestaServicio = new SerieVO();
respuestaServicio.setMensaje("No se ha encontrado la serie");
try {
respuestaServicio = svc.findByTitleContainingIgnoreCase(nombreSerie);
model.addAttribute("listaSeries", respuestaServicio.getSeries());
return new ModelAndView("resultadoserie");
} catch (Exception e) {
logger.error("Error al buscar la serie", e);
}
return new ModelAndView("redirect:/user");
}
}
搜索输入
<div class="d-flex justify-content-center pb-2">
<div class="container row">
<div class="col-md-4">
<div class="d-flex justify-content-center">
<h2>Buscar serie</h2>
</div>
</div>
<div class="col-md-8">
<form action="buscarSerie" method="get">
<div class="row g-2">
<div class="col-md">
<div class="form-floating">
<input type="text" class="form-control" id="floatingInputGrid"
value="" name="nombreSerie" required> <label
for="floatingInputGrid">Serie</label>
</div>
</div>
</div>
<div class="d-flex justify-content-center pt-4">
<input type="submit" class="btn m-2 btn-dark" value="Buscar" />
</div>
</form>
</div>
</div>
</div>
正如我所说,我真的迷路了,到处研究,并检查了我上一个项目中的代码,我就是找不到为什么这个让我这么脏。甚至一开始就不会失败,它让我看到了希望,当我想重试时,它粉碎了那一点点希望。 :)
我尝试删除我的代码并从我知道它按预期工作的项目中复制和粘贴,更改变量和参数。名称以使其与新程序一起使用但没有用。并排比较,尝试使用 @Query 编写特定指令。寻找信息。仅使用 'contains' 过滤器,但没有任何效果。
根据 Spring Data JPA issue #2472 这似乎是 Hibernate 5.6.6 和 5.6.7 中的一个问题。
Hibernate 错误是 HHH-15142。
解决方案是降级到 Hibernate 5.6.5 或等待 Hibernate 补丁来解决此问题。