jfluteです、よしさん、こんにちは。
DBFluteの最新版へのアップグレードありがとうございますう!
> NonSpecifiedColumnAccessException
ふむ、これは...
「SpecifyColumnしてないカラムなのに、Entityでgetしてるよ」
という例外ですね。
> 検索時に specify() で、検索対象の項目を限定
> その後 dtoMapper で entityからdtoに変換する際にこの例外が発生いたします。
なるほど、こういうときに状況と合ってないということです。
いくつか考えられるのが...
<1>
限定的な検索であれば、その検索だけそのチェックをOFFにするという回避策があります。
memberBhv.selectList(cb -> {
cb.disableNonSpecifiedColumnAccess();
});
<2>
チェックの恩恵を受けつつ、DtoMapperだけを回避したいのであれば、
DtoMapperのvmファイルを修正して、Specifyされてるかどうかを判定するようにするとか。
Set<String> specifiedSet = member.myspecifiedProperties();
if (specifiedSet.contains("XXX_COLUMN")) {
member.getMemberAccount();
}
たぶん、SimpleDtoBaseMapper.vm の mappingToDto() のあたりかなと。
ただ、上記のような単純な修正で変な副作用がないか確認が必要ですし、
上記箇所だけの修正とは限らなかったり少し敷居が高めです。
<3>
チェックの恩恵は諦めて、完全にチェックをOFFにしてしまうとか。
littleAdjustmentMap.dfprop にて isNonSpecifiedColumnAccessAllowed を true にします。
<4>
"2" に近いのですが、もうちょい豪快に。
DtoMapperの中で、引数で受け取った Entity は問答無用で .clearSpecifiedInfo() を呼び出すようにすると、
チェックがかからなくなるはずです。
DtoMapperにEntityを入れたら、そのEntityインスタンスは別のところで使われたりしないですよね?
であれば、Specified情報をロストさせてしまっても特に問題はないのかもと。
いま、パッと思い付いたのはこんな感じです。