我可以在关联映射器中使用鉴别器吗?

时间:2015-05-09 20:14:15

标签: java mybatis

我想根据Object(State Pattern)的具体状态设置result属性。

如何使用myBatis做到最好?

这种方法给我一个错误:

<association property="state" javaType="commonInterface">
    <discriminator javaType="String" column="state">
        <case value="CREATED" resultType="ClassA" />
        <case value="RUNNING" resultType="ClassB" />
        <case value="FINSHED" resultType="ClassC" />
    </discriminator>
</association>

错误是:

Could not set property 'state' of 'FatherClass' with value '1' 
Cause: java.lang.IllegalArgumentException: Can not set com.example.State field 
com.example.state to java.lang.Long

所以不知何故myBatis返回Long而不是具体对象。这种方法是否可行?

编辑:状态&#34;创建&#34;,&#34;运行&#34;,&#34;完成&#34;来自枚举,当它保存到数据库时。但是当它再次被读取时,我可以轻松地将其视为一个字符串 - 对吧?!

1 个答案:

答案 0 :(得分:0)

您应该将您的POJO声明为枚举而不是类,无论如何,Mybatis中有默认的枚举处理,但您可以继续提供自己的自定义处理程序:

http://www.mybatis.org/mybatis-3/configuration.html#typeHandlers

了解详情