一、遇到的問題
could not resolve property: status of: com.**.entity.User; nested exception is org.hibernate.QueryException: could not resolve property: status of: com.**.User
報錯資訊顯示
could not resolve property :status of
"status"
這是資料庫中的一個字段,報的錯是無法解析這個字段,Idea能自動生成持久化類和對應的配置檔案,是以先排除配置檔案出錯。
因為這個屬性不是放在實體中的,它作為一個每個表都有的屬性,是以我放在了基礎類Basebean裡面,讓其他實體bean繼承這個BaseBean。
如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPj1mYox2VjxmWzI2c1cVWxgmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzAjN0QTNwETM3EjNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
根據報錯資訊可以發現這個屬性沒有被解析上。
後面找到這個(@MappedSuperclass)注解加上,問題解決。
@MappedSuperclass注解作用
當我們進行開發項目時,我們經常會用到實體映射到資料庫表的操作,此時我們經常會發現在我們需要映射的幾個實體類中,有幾個共同的屬性,例如編号ID,建立者,建立時間,修改者,修改時間,備注等。遇到這種情況,我們可能會想到把這些屬性抽象出來當成一個父類,然後再以不同的實體類來繼承這個父類。
那麼,我們便可以使用@MappedSuperclass注解,通過這個注解,我們可以将該實體類當成基類實體,它不會映射到資料庫表,但繼承它的子類實體在映射時會自動掃描該基類實體的映射屬性,添加到子類實體的對應資料庫表中。
二、@MappedSuperclass使用方法和注意事項
[email protected]注解使用在父類上面,是用來辨別父類的;
[email protected]辨別的類表示其不能映射到資料庫表,因為其不是一個完整的實體類,但是它所擁有的屬性能夠在其子類對用的資料庫表中;
[email protected]辨別的父類不能再有@Entity或@Table注解,但其子類可以有@Entity或@Table注解,來映射到資料庫中的表。
注意:标注為@MappedSuperclass的類不能再标注@Entity或@Table注解,也無需實作序列化接口.