2015-06-11 50 views
0

我有这个块控制器:Java /我的Batis不返回布尔值?

@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

任何提示?

+2

尝试将'boolean'更改为'Boolean'简单类型可能会令人困惑。 – AbstractChaos

回答

1

您的数据库是否支持布尔值?

例如Oracle没有本地布尔值,所以有可能mybatis不支持布尔值。

尝试别的东西:选择行,然后检查你的DAO方法,如果特殊字段是布尔值。

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地图:

<select id="isWorkflowCoordinatorExistingForStep" resultType="path.to.SomeObject"> 
     SELECT * 
     FROM mo_subject_privileges 
     WHERE workflow_step_id = #{workflowStepId} 
</select> 
+0

非常感谢您的帮助,但我期待着检索布尔值而不是对象。如果我检索一个字符串,你认为它会兼容吗? –

+0

它取决于你的数据库,但它认为它可以工作 – duffy356

+0

哪些值会返回你的选择? – duffy356

2

它可能是数据存储在数据库中的字符串,而不是一个布尔值,这是常有的案件。可能会添加一个println(selectone.tostring()),以确保输出为'TRUE'而不是'T'。

0

您检查该字段是否为数据库中的字符串。 您可以将值解码

DECODE(is_coordinator,'t', true, 'f', false)