2017-06-09 1 views
3

私のドメインクラスには属性が列挙型にマップされています。 Strangely MyBatis 3.4.x(3.4.0と3.4.4の両方)はSpring MyBatis 1.3.1と無関係の列挙型にマップしようと試み、エラーを出します。MyBatisが属性を間違ったEnumにマップします

org.mybatis.spring.MyBatisSystemException:ネストされた例外はorg.apache.ibatis.executor.result.ResultMapExceptionです:エラーは、結果セットから列を 'order_line_programmed' を取得しようとします。原因:java.lang.IllegalArgumentExceptionが:いいえ列挙型定数foo.UnrelatedEnum.yes

マイドメインクラスは次のようになります。

public class OrderLine { 

    private Long id; 
    private Product product; 
    private ProgrammedStatus programmedStatus; 
    private String programmedFeedback; 
    private boolean completed = false; 
} 

ProgrammedStatusは、単純な列挙型

public enum ProgrammedStatus { 
    yes, no, error; 
} 

それはですこのプログラムされた状態は、以下のようにプログラムされた列にマッピングされる。

<resultMap id="orderLineResult" type="foo.OrderLine"> 
    <id property="id" column="technical_order_line_id" /> 
    <result property="programmedStatus" column="order_line_programmed" typeHandler="org.apache.ibatis.type.EnumTypeHandler" /> 
    <result property="programmedFeedback" column="order_line_programmed_feedback" /> 
    <result property="completed" column="order_line_completed" 
     javaType="java.lang.Boolean" typeHandler="org.apache.ibatis.type.BooleanTypeHandler" /> 
    <association property="product" 
     notNullColumn="order_line_product_id" 
     resultMap="foo.repository.mapper.ProductMapper.productResult" /> 
</resultMap> 

javaTypeをtypeHandlerでマッピングしようとしても、MyBatisはそれを無視しているようです。便利かもしれません

少数情報ProgrammedStatus

  • 製品は、私はこれを見つけたタイプの

    UnrelatedEnum

  • ある属性を持つ属性を持っているとして、

    • UnrelatedEnumも、単純な列挙型でありますコードの他の場所でも発行されます。私は、ここではEnumTypeHandlerではなく、自分の特定のtypeHandlerを持つことができます。問題は、このenumマッチングがプログラムの多くの場所で使用されており、マイグレートすると3.4がプログラムを不安定にしてしまうことです。

    答えて

    -1

    ちょっと質問:データベースにはorder_line_programmedCHARまたはVARCHARのフィールドがありますか?
    のでCHAR(5)は、あなたがいないyesまたはnoしかしyes..またはno...リターンとして得ることができます(明確化のために「」スペースである)、なぜならパディングのerror

    +0

    これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューから](レビュー/低品質の投稿/ 18263348) – JimHawkins

    +0

    申し訳ありませんが、Gunithが私のフィールドで自分自身に答えた場合は、CHAR型があり、ソリューションが提供されます:VARCHARに変更してください。 –

    0

    の長さによって定義されたCHARサイズと一致する場合

    typeHandler = "org.apache.ibatis.type.EnumTypeHandler":明示的に言及した列挙typeHandlerは私

    削除のために働い削除

    <resultMap id="orderLineResult" type="foo.OrderLine"> 
        <id property="id" column="technical_order_line_id" /> 
        <result property="programmedStatus" column="order_line_programmed" /> 
        <result property="programmedFeedback" column="order_line_programmed_feedback" /> 
        <result property="completed" column="order_line_completed" 
         javaType="java.lang.Boolean" typeHandler="org.apache.ibatis.type.BooleanTypeHandler" /> 
        <association property="product" 
         notNullColumn="order_line_product_id" 
         resultMap="foo.repository.mapper.ProductMapper.productResult" /> 
    </resultMap> 
    
    関連する問題