場景:自定義註解,AOP攔截,處理前置業務。然後從spring中getBean,然後將此bean存入數據庫,將報noMapping entity錯誤。
原因:AOP攔截,因爲bean不是用的接口,AOP將動態代理此bean。如果從spring中getBean,那麼spring將掃描此bean,發現註解,然後代理此對象。因爲spring都是新產生的對象,採用prototype的形式。那麼當前對象將轉變成代理對象,hibernate的映射嚴格對照xml,將不認識此代理對象,報錯。
解決:AOP攔截接口;在方法中new一個新對象,將代理對象的值拷貝到新對象中,再持久化;避免將該對象持久化。