目次
質問 1: 注釈 @GeneratedValue がエンティティ クラスの id フィールドで使用されており、データの挿入時に null 以外の例外が表示されます。
序文
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);
}