Java / My Batis没有返回布尔值?

时间:2015-06-11 16:00:25

标签: java spring spring-mvc mapping mybatis

我在控制器中有这个块:

@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

任何提示?

3 个答案:

答案 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)