2016-08-29 14 views
2

MyBatisマッピングに問題があります。 私はこのようなドメインのクラスがあります3つの列は、タイプ番号、タイムスタンプと、CLOBのであり、それを持っているデータベースでMyBatis - コンストラクタが見つかりません

@Select("SELECT * FROM MyTable WHERE id=#{id}") 
    MyClass getMyClass (@Param("id") Long id); 

:このような方法に

public class MyClass 
{ 
    private Long id; 
    private Date create; 
    private String content; 

    MyClass (Long id, Date create, String content) 
    { 
     this.id = id; 
     this.create = create; 
     this.content = content; 
    } 

    //getters and setters 

マッパークラスを名前をクラスフィールドと同じにします。

このメソッドを使用すると、次のような結果が得られます。 ExecutorException:[MyClass;マッチング[java.math.BigDecimalの、をjava.sql.Timestamp、oracle.jdbc.OracleClob]

しかし、私はMyClassのコンストラクタからを削除する場合は、すべてので問題はありません。私はコンストラクタを持っていますが、どうすれば修正できますか? 私はそうのようなマッパーで@Results注釈を追加しようとしたが、それはどんな違いがありませんでした:

@Results(value = { 
     @Result(column = "id", property = "id", javaType = Long.class), 
     @Result(column = "create", property = "create", javaType = Date.class), 
     @Result(column = "content", property = "content", javaType = String.class) 
    }) 

答えて

12

MyBatisのは、あなたのモデルがマップされた各フィールドの無引数のコンストラクタ(そしておそらくセッターを持っているオブジェクトを期待)。それらを加えて、すべてがうまくいくはずです。

+0

をはい、私は空のコンストラクタがありませんでした。私はそれを追加し、すべて正常に動作します。私は数分で受け入れるだろう、それはまだ私にそれをさせていない – enkara

+0

あなたは私の人生を救った。空のコンストラクタが見つかりませんでした。 – mainframer

1

次のようにして、代わりに@ConstructorArgsを使用することができます。

@ConstructorArgs({ 
    @Arg(column = "id", javaType = Long.class) 
    ,@Arg(column = "create", javaType = Date.class) 
    ,@Arg(column = "content", javaType = String.class) 
}) 
関連する問題