天天看點

could not resolve property: status of: com.**.User; nested exception is org.hibernate.QueryException一、遇到的問題二、@MappedSuperclass使用方法和注意事項

一、遇到的問題

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。

如下圖:

could not resolve property: status of: com.**.User; nested exception is org.hibernate.QueryException一、遇到的問題二、@MappedSuperclass使用方法和注意事項

根據報錯資訊可以發現這個屬性沒有被解析上。

後面找到這個(@MappedSuperclass)注解加上,問題解決。

@MappedSuperclass注解作用

當我們進行開發項目時,我們經常會用到實體映射到資料庫表的操作,此時我們經常會發現在我們需要映射的幾個實體類中,有幾個共同的屬性,例如編号ID,建立者,建立時間,修改者,修改時間,備注等。遇到這種情況,我們可能會想到把這些屬性抽象出來當成一個父類,然後再以不同的實體類來繼承這個父類。

那麼,我們便可以使用@MappedSuperclass注解,通過這個注解,我們可以将該實體類當成基類實體,它不會映射到資料庫表,但繼承它的子類實體在映射時會自動掃描該基類實體的映射屬性,添加到子類實體的對應資料庫表中。

二、@MappedSuperclass使用方法和注意事項

[email protected]注解使用在父類上面,是用來辨別父類的;

[email protected]辨別的類表示其不能映射到資料庫表,因為其不是一個完整的實體類,但是它所擁有的屬性能夠在其子類對用的資料庫表中;

[email protected]辨別的父類不能再有@Entity或@Table注解,但其子類可以有@Entity或@Table注解,來映射到資料庫中的表。

注意:标注為@MappedSuperclass的類不能再标注@Entity或@Table注解,也無需實作序列化接口.