【问题标题】:Query error with parameter passing - Hibernate参数传递查询错误 - Hibernate
【发布时间】:2022-01-23 00:48:32
【问题描述】:

我正在尝试使用休眠模式查询数据库,当我传递参数时出现以下错误。

你能帮帮我吗?

    public List<Viaje> getListaViajes(Localizacion idOrigen, Localizacion idDestino, SessionFactory _SessionBuilder) {

        Session sesion = _SessionBuilder.openSession();

        Query origen = sesion.createQuery("from Localizacion where nombre = :nombreLocalizacion");

        origen.setParameter("nombreLocalizacion", idOrigen.getNombre());
        Localizacion idOrigen2 = (Localizacion) origen.uniqueResult();
        
        System.out.println(idOrigen2.getId() + " ES SU ID.");

错误:

Información:   from Localizacion where nombre = (:nombreLocalizacion)
Información:   Hibernate: select localizaci0_.ID as ID1_8_, localizaci0_.Nombre as Nombre2_8_, localizaci0_.estacion as estacion3_8_, localizaci0_.latitud as latitud4_8_, localizaci0_.longitud as longitud5_8_ from bd_viajes_sig.localizacion localizaci0_ where (nombre=(?))
Advertencia:   StandardWrapperValve[ControladorAjaxDestinosDisponibles]: Servlet.service() for servlet ControladorAjaxDestinosDisponibles threw exception
java.lang.NullPointerException

问题是这行不行,因为查询对应的值没有设置:

origen.setParameter("nombreLocalizacion", idOrigen.getNombre());

如果我输入查询,它是否有效。

Query origen = sesion.createQuery("from Localizacion where nombre = 'España');

idOrigen.getNombre() 方法可以正常工作,所以这不是错误。

【问题讨论】:

    标签: java sql hibernate


    【解决方案1】:

    这很可能是你被抛出 null 的地方:

    Localizacion idOrigen2 = (Localizacion) origen.uniqueResult();
    

    origen 为空。在尝试访问结果之前先验证它不为空。还要确保您将正确的值传递给您的查询。我看不到方法 nombreLocalizacion 的设置位置。这也可能是另一个问题。

    【讨论】:

    • 对不起,我没有复制 nombreLocalizacion 部分,我再次修改了代码并进行了更多说明,如果您可以再次检查,我将不胜感激,非常感谢。
    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多