Java Hibernate引发转换数据类型异常

Java Hibernate引发转换数据类型异常,java,sql-server,hibernate,Java,Sql Server,Hibernate,我正在将所有sql查询转换为使用Hibernate参数。现在,当我在查询中添加一个参数并将其与一个变量进行映射时,它总是给出错误: 错误o.h.e.jdbc.spi.SqlExceptionHelper-转换数据类型时出错 从nvarchar到bigint 这没有任何意义,因为我添加了一个字符串参数 查询如下所示: Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequiredd

我正在将所有sql查询转换为使用Hibernate参数。现在,当我在查询中添加一个参数并将其与一个变量进行映射时,它总是给出错误:

错误o.h.e.jdbc.spi.SqlExceptionHelper-转换数据类型时出错 从nvarchar到bigint

这没有任何意义,因为我添加了一个字符串参数

查询如下所示:

Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequireddate, itemid  "
                + "FROM   [materialManagement].[pcsorderrequirement] r  JOIN materialmanagement.pcsorders o  "
                + "ON o.id = r.pcsorderid  WHERE  itemid IN ( :items )   "
                + "AND Cast(o.materialrequireddate AS DATE) >= Cast(Getdate() AS DATE)  "
                + "AND o.materialrequireddate <= Cast( :endDate AS DATE)  "
                + "GROUP  BY o.materialrequireddate, itemid")
                .setString("items", items).setString("endDate", endDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequireddate, itemid  "
                + "FROM   [materialManagement].[pcsorderrequirement] r  " + "JOIN materialmanagement.pcsorders o  "
                + "ON o.id = r.pcsorderid  " + "WHERE  itemid IN (" + items + ")   "
                + "AND Cast(o.materialrequireddate AS DATE) >= Cast(Getdate() AS DATE)  "
                + "AND o.materialrequireddate <= Cast('" + endDate + "' AS DATE)  "
                + "GROUP  BY o.materialrequireddate, itemid");
Query Query=session.createSQLQuery(“选择Sum([qtyrequired])作为PC、o.materialrequireddate、itemid”
+“来自[materialManagement]。[pcsorderrequirement]r加入materialManagement.pcsorders o”
+“ON o.id=r.pcsorderid,其中itemid位于(:items)”
+“AND Cast(o.materialrequireddate AS DATE)>=Cast(Getdate()AS DATE)”
+“和o.materialrequireddate=Cast(Getdate()作为日期)”

+“和o.materialrequireddate我将查询更改为不转换为日期,并使用正确的类型设置参数:

Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequireddate, itemid  "
                + "FROM   [materialManagement].[pcsorderrequirement] r  JOIN materialmanagement.pcsorders o "
                + "ON o.id = r.pcsorderid  WHERE  itemid IN ( :items ) "
                + "AND Cast(o.materialrequireddate AS DATE) >= Cast(Getdate() AS DATE)  "
                + "AND o.materialrequireddate <= :endDate "
                + "GROUP  BY o.materialrequireddate, itemid").setParameterList("items", items.stream().map(Item::getId).collect(Collectors.toList()))
                .setDate("endDate", Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
Query Query=session.createSQLQuery(“选择Sum([qtyrequired])作为PC、o.materialrequireddate、itemid”
+“来自[materialManagement]。[pcsorderrequirement]r加入materialManagement.pcsorders o”
+“ON o.id=r.pcsorderid,其中itemid位于(:items)”
+“AND Cast(o.materialrequireddate AS DATE)>=Cast(Getdate()AS DATE)”

+ "和o.materialrequireddate出现异常的原因是您正在为itemId值列表传递一个字符串参数。SQL Server要求在
子句中的
中的每个值都有单独的整数参数。我无法说明如何使用Hibernate实现这一点。这是一个示例,但我在每个映射中都会得到它,当我包含一个正常值时String值将不被放置在In中。对于标量参数值,指定适当的数据类型设置器,如“代码> SETDATE < /代码>。还要注意,在查询谓词中应用一个函数将阻止索引被有效地使用。考虑重构<代码> Case:O.OrthuralRealdDeDaseDeals> > Case:GETDATE()作为日期)
as
o.materialrequireddate as DATE>=Cast(Getdate()as DATE)