Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据类型varchar转换为float时发生QueryDSL枚举错误_Java_Sql Server_Enums_Querydsl - Fatal编程技术网

Java 将数据类型varchar转换为float时发生QueryDSL枚举错误

Java 将数据类型varchar转换为float时发生QueryDSL枚举错误,java,sql-server,enums,querydsl,Java,Sql Server,Enums,Querydsl,我在SQL 2008上执行使用QueryDSL生成的查询时遇到问题 我的实体bean上有一个枚举字段: @Column(name="APPROVAL_BY") @Enumerated(EnumType.STRING) private ApprovalTypeEnum approvedBy; 我用它在querydsl BooleanBuilder中过滤我的结果集: builder.and(qPositionToIndividualRelationship.approvedBy.stringVal

我在SQL 2008上执行使用QueryDSL生成的查询时遇到问题

我的实体bean上有一个枚举字段:

@Column(name="APPROVAL_BY")
@Enumerated(EnumType.STRING)
private ApprovalTypeEnum approvedBy;
我用它在querydsl BooleanBuilder中过滤我的结果集:

builder.and(qPositionToIndividualRelationship.approvedBy.stringValue().in(filter.getSelectedApprovalTypeList()));
然后在执行的SQL中生成以下子句:

str(positionto1_.APPROVAL_BY) in ('Value1' , 'Value2')
如果没有要返回的结果,这很好,也不会遇到错误,但是如果有结果,我会得到以下结果:

[SqlExceptionHelper.logExceptions]SQL错误:8114,SQLState:S0005 [SqlExceptionHelper.logExceptions]将数据类型varchar转换为float时出错

如果我在没有使用str进行解析的情况下手动执行查询,那么查询工作正常,并返回我期望的结果

有谁知道:

为什么SqlServer方言决定使用str进行解析? 有没有办法防止这种情况?
干杯

因此,我对这里发生的事情的理解是调用.stringValue是在查询中插入STR,而不是像您所希望的那样获取枚举的字符串值。因为它处理的是“路径”类型的对象,所以不确定是否有这样做的方法

我认为queryDSL真的想让你比较枚举和枚举,或者对象和对象。然后它将处理转换,因此您无需担心

即。 builder.and Qposition to individual relationship.approvedBy.infilter.getSelectedApprovalTypeList


其中filter.getSelectedApprovalTypeList返回您的ApprovalTypeEnum列表

SQL不会要求您使用STR。这将是您的ORM自己做的事情,顺便说一句,这没有任何意义。STR字符串表示数字字段。它永远不会包含类似“Value1”的内容。我猜你的问题是QueryDSL层中的某种类型或配置认为字段是数字的,因此对话和试图在SQL中使用STR。嗨,Andrew,谢谢你的回答-是的,我不认为是SQL本身在做任何事情,它只能执行给定的语句,我理解问题与ORM如何解释并传递语句以执行有关。话虽如此,正如您所说,它在一个明确定义的字符串类型的枚举字段上使用STR毫无意义。。。。