Mysql は Kingbase を移行し、ID 挿入の問題が発生したときに tk.mybatis を使用してデータを保存します

目次

序文

質問 1: 注釈 @GeneratedValue がエンティティ クラスの id フィールドで使用されており、データの挿入時に null 以外の例外が表示されます。

質問2: データを挿入する際、保存時のIDが返されません。


序文

Mysql が Kingbase を移行したとき、データを挿入するときにいくつかの ID の問題が発生し、解決しました。

質問 1: 注釈 @GeneratedValue がエンティティ クラスの id フィールドで使用されており、データの挿入時に null 以外の例外が表示されます。

        ID の注釈 @GeneratedValue は、データの挿入時に ID に null 値を自動的に与えます。Mysql は挿入時に id を null 値としてサポートしますが、kingbase はサポートしていないため、この注釈を削除するだけで、id は自動的に設定されますデータベースが移行される場合、主キー。このアノテーションを使用する必要はありません

質問2: データを挿入する際、保存時のIDが返されません。

        データを保存する際に、このエンティティクラスの戻りID値を保存時に取得する必要がある場合は、継承した汎用マッパーファイルのtk.mybatisにデータを挿入するメソッドを書き直し、新たに2つのアノテーション @InsertProvider と @Options を追加する必要があります。できる

public interface InsertDAO<T> extends Marker,
        InsertMapper<T>,
    InsertSelectiveMapper<T>,
    MySqlMapper<T> {
    @Override
    @InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insert(T record);

    @Override
    @InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insertList(List<? extends T> recordList);

    @Override
    @InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insertSelective(T record);
}

おすすめ

転載: blog.csdn.net/GuaGea/article/details/131307020