2017-06-09 2 views
3

Meine Domäne-Klasse verfügt über Attribute, die einer Enumeration zugeordnet sind. Seltsamerweise MyBatis 3.4.x (Sowohl 3.4.0 als auch 3.4.4. Dies arbeitete mit 3.3.x) mit Spring MyBatis 1.3.1 versucht, es mit einer nicht verwandten Aufzählung zuzuordnen und gibt den Fehler.MyBatis ordnet das Attribut der falschen Enum zu

org.mybatis.spring.MyBatisSystemException: verschachtelte Ausnahme ist org.apache.ibatis.executor.result.ResultMapException: Fehler 'order_line_programmed' von Ergebnismenge zu erhalten Spalte versucht. Ursache: java.lang.IllegalArgumentException: keine Enum Konstante foo.UnrelatedEnum.yes

sieht Meine Domain-Klasse wie folgt aus:

public class OrderLine { 

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

ProgrammedStatus ist ein einfaches Enum

public enum ProgrammedStatus { 
    yes, no, error; 
} 

Es ist Dieser programmierteStatus, der wie folgt auf die programmierte Spalte abgebildet wird,

<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> 

Ich habe sogar versucht, den JavaType mit dem TypeHandler zu mappen, aber MyBatis scheint es zu ignorieren.

Nur wenige Informationen, die nützlich sein können,

  • UnrelatedEnum ist auch eine einfache Enum als ProgrammedStatus
  • Produkt hat ein Attribut, das ein Attribut hat, die UnrelatedEnum vom Typ

ich diese gefunden Problem auch an anderen Stellen des Codes. Ich könnte meinen eigenen spezifischen Typ Handler anstelle des EnumTypeHandler hier haben. Das Problem ist, dass dieser Enum-Abgleich an vielen Stellen in meinem Programm verwendet wird und Migrieren mit 3.4 mein Programm instabil macht.

Antwort

-1

Nur eine Frage: ist das Feld order_line_programmedCHAR oder VARCHAR in der Datenbank?
Denn wenn es CHAR(5) dann könnte man als Gegenleistung erhält nicht yes oder no aber yes.. oder no... (zur Klarstellung „“ ist Raum), wegen der Polsterung der CHAR Größe durch die Länge der error

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18263348) – JimHawkins

+0

Entschuldigung - aber es tut, wenn Gunith es auf sich selbst antwortet, indem mein Feld CHAR hat, dann ist die Lösung vorgesehen: Wechseln Sie zu VARCHAR. –

0

definiert Übereinstimmen Entfernen der explizit erwähnt enum typehandler für mich gearbeitet

Remove: typehandler = "org.apache.ibatis.type.EnumTypeHandler"

<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> 
Verwandte Themen