我在控制器中有这个块:
@Override
@Transactional(propagation = Propagation.SUPPORTS)
public boolean isWorkflowCoordinatorExistingForStep(final long workflowStepId) {
Validate.notNull(workflowStepId, "workflow step id cannot be null");
return (boolean) this.auditingSqlSession.selectOne("isWorkflowCoordinatorExistingForStep", workflowStepId);
}
用这个映射:
<select id="isWorkflowCoordinatorExistingForStep" resultType="java.lang.Boolean">
SELECT is_coordinator
FROM mo_subject_privileges
WHERE workflow_step_id = #{workflowStepId}
</select>
对我来说似乎很好,但事实并非如此:我得到的是“Inconvertible types. Cannot cast java.lang.Object to boolean
”
任何提示?
答案 0 :(得分:2)
数据可能是以字符串形式存储在数据库中而不是布尔值,通常就是这种情况。也许添加一个println(selectone.tostring())以确保输出是&#39; TRUE&#39;而不是&#39; T&#39;例如。
答案 1 :(得分:1)
您的数据库是否支持布尔值?
例如,Oracle没有本机布尔值,因此mybatis可能不支持布尔值。
尝试其他方法:选择行,然后检查DAO-Method,如果特殊字段是布尔值。
<强> DAO:强>
@Override
@Transactional(propagation = Propagation.SUPPORTS)
public boolean isWorkflowCoordinatorExistingForStep(final long workflowStepId) {
Validate.notNull(workflowStepId, "workflow step id cannot be null");
SomeObject so = (SomeObject) this.auditingSqlSession.selectOne("isWorkflowCoordinatorExistingForStep", workflowStepId);
return so.isCoordinator(); // if neccassary, check for null
}
<强> XML-MAP:强>
<select id="isWorkflowCoordinatorExistingForStep" resultType="path.to.SomeObject">
SELECT *
FROM mo_subject_privileges
WHERE workflow_step_id = #{workflowStepId}
</select>
答案 2 :(得分:0)
检查字段是否为DB中的字符串。 您可以解码值
DECODE(is_coordinator,'t', true, 'f', false)