Java Hibernate引发转换数据类型异常
我正在将所有sql查询转换为使用Hibernate参数。现在,当我在查询中添加一个参数并将其与一个变量进行映射时,它总是给出错误: 错误o.h.e.jdbc.spi.SqlExceptionHelper-转换数据类型时出错 从nvarchar到bigint 这没有任何意义,因为我添加了一个字符串参数 查询如下所示: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
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()作为日期)
aso.materialrequireddate as DATE>=Cast(Getdate()as DATE)
。