jfluteです。
selectされたEntityって、modifiedProperties情報は空っぽで、
代わりに createdBySelect が true になって、そして、全カラム列挙になるんですよね。
(TnInsertEntityDynamicCommand.java にて)
なので、modifiedProperties を cancel してもあまり意味がないと。
そしてまさしく、varyingInsert() の InsertOption を使えば、
対象カラムを制御できるのですが、列挙式になるので、
以下のようにループで除外するみたいになってしまいます。
(dbmetaでリフレクションは無しでも実現はできます)
Member member = memberBhv.selectByPK(1).get();
MemberDbm memberDbm = MemberDbm.getInstance();
ColumnInfo birthdateCol = memberDbm.columnBirthdate(); // generated column
memberBhv.varyingInsert(member, op -> op.specify(cb -> {
List<ColumnInfo> columnInfoList = memberDbm.getColumnInfoList();
for (ColumnInfo columnInfo : columnInfoList) {
if (columnInfo.equals(birthdateCol)) {
continue;
}
cb.invokeSpecifyColumn(columnInfo.getPropertyName());
}
}));
該当箇所が少なければ、上記のやり方で回避するって感じが一番現実的かもですね。
DBFluteとしては、実際にありえるケースなんだ、ってことがわかったので、
イシュー #239 をちゃんとやっていかなとなーと思った次第で。
generated column をdfpropでベタに指定してもらって、
insert対象から外す処理を入れるとか...