第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

老師,metaObject.hasSetter在insert時能判斷字段是否存在,在update時不判斷統(tǒng)一返回為true


老師,按照教程,我在代碼中,在insertFill和updateFill中都對要自動填充的字段進(jìn)行了判斷如下

@Override
public?void?insertFill(MetaObject?metaObject)?{
????if?(metaObject.hasSetter("createTime"))?{
????????log.info("自動插入");
????????LocalDateTime?current?=?LocalDateTime.now();
????????this.setInsertFieldValByName("createTime",?current,?metaObject);
????}
}

@Override
public?void?updateFill(MetaObject?metaObject)?{
????if?(metaObject.hasSetter("updateTime"))?{
????????log.info("自動更新字段");
????????LocalDateTime?current?=?LocalDateTime.now();
????????this.setUpdateFieldValByName("updateTime",?current,?metaObject);
????}
}

經(jīng)過debug發(fā)現(xiàn),metaObject.hasSetter在insert時,底層調(diào)用的是BeanWrapper.hasSetter的方法,能判斷是否包含了要設(shè)置的字段。

但是在update時,底層調(diào)用的是MapWrapper.hasSetter方法,這個方法直接返回true,并不判斷是否包含要設(shè)置的字段,導(dǎo)致自動metaObject.hasSetter的判斷不起作用,如下是debug截圖。

http://img1.sycdn.imooc.com//5e71a1da000134e607710167.jpg

我使用的mp版本是3.2.0。更新時調(diào)用的方法是updateById,不明白為什么在更新時沒有調(diào)用BeanWrapper方法,而是調(diào)用MapWrapper

正在回答

4 回答

同學(xué),你使用3.3.1.tmp版本試試,看看好不好使,我使用這個版本,debug時,看著調(diào)用的是BeanWrapper。

0 回復(fù) 有任何疑惑可以回復(fù)我~
Object?time?=?getFieldValByName("createTime",?metaObject);

Object?time?=?getFieldValByName("updateTime",?metaObject);

在用法上沒有區(qū)別,是可以使用的

0 回復(fù) 有任何疑惑可以回復(fù)我~

老鐵,你說的沒錯,可能這是官方的bug吧,我首先debug了

boolean?updateTime?=?metaObject.hasSetter("updateTime");

發(fā)現(xiàn)走的是MapWrapper.class中的代碼:

public?boolean?hasSetter(String?name)?{
????return?true;
}

直接返回的就是true,而debug以下代碼的時候:

boolean?createTime?=?metaObject.hasSetter("createTime");

發(fā)現(xiàn)走的是BeanWrapper.class中的代碼:

public?boolean?hasSetter(String?name)?{
????PropertyTokenizer?prop?=?new?PropertyTokenizer(name);
????if?(prop.hasNext())?{
????????…………
????}?else?{
????????return?this.metaClass.hasSetter(name);
????}
}

所以添加

@TableField(fill?=?FieldFill.INSERT)

@TableField(fill?=?FieldFill.UPDATE)

他們走的判斷路徑都不一樣

0 回復(fù) 有任何疑惑可以回復(fù)我~

你的實體類上的注解是不是沒有

@TableField(fill?=?FieldFill.INSERT_UPDATE?)
private?Date?time;

你如果就是insert肯定沒用啊?

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

老師,metaObject.hasSetter在insert時能判斷字段是否存在,在update時不判斷統(tǒng)一返回為true

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號