原文地址:https://www.miaoroom.com/code/note/mybatis-debug-notes.html
出處:喵容
本文會零零碎碎的更新自己在學習 Java持久層
碰到的問題和解決辦法,希望這些踩坑的歷程能給需要的你帶來幫助。
由於文章主要為 Spring Data JPA
和 Mybatis
的內容。
1. org.hibernate.AnnotationException: No identifier specified for entity:
private Integer categoryId;
這個錯誤看上去是這張表沒有主鍵,在使用hibernate的映射表的時候entity類是必須要主鍵的,否則就會報出這個異常。所以解決如下,添加自增的ID主鍵:
@Id
@GeneratedValue
private Integer categoryId;
如果我們已經配置了@ID,還會報這個錯誤是因為import錯包了,錯誤的使用了org.springframework.data.annotation.Id包。
當我們使用@Entity的時候,提示我們Entity過時,被划了橫線,是因錯誤的引用了org.hibernate.annotations.Entity包,這裡應該使用JPA的註解javax.persistence.Entity,而不是hibernate的。
Table ‘XXX.hibernate_sequence’ doesn’t exist
在實體中,將ID生成略組改成@GeneratedValue(strategy = GenerationType.IDENTITY)。
如以下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer categoryId;
刪測試數據很麻煩
在方法前加上 code>@Transactional 註解,會讓你當前的事務操作在執行完成後完全回滾。若執行完未報錯,則意為測試通過。可搭配Aseert
斷言使用,這樣便省去了我們測試完還要刪除測試數據的多餘操作。
‘PageRequest(int, int)’ is deprecated
PageRequest類使用的時候利用new一個對象的時候報錯,所這個方法過時了,解決方法
PageRequest pageRequest=new PageRequest(int ,int );//提示方法過時
應該使用
PageRequest request = PageRequest.of(0,1);
一對多查詢 java.lang.IllegalStateException: No typehandler found for property
在使用tk.mybatis建立實體的時候我們使mapper繼承myMapper不需要我們對mapper.xml文件中寫很多重複的代碼了,如果因為表中沒有實體中對應的字段而出現錯誤Caused by: java.lang.IllegalStateException: No typehandler found for property xxx,這種情況下就需要你去排查字段。
- 如果你有字段沒能和數據庫中的對應,應該使用@Column(name = "xxx")或者直接把變數名叫的和數據庫中字段名字相同。
- 當有時我們需要忽略這些字段,那麼就可以使用@Transient來加在這個字段的頭上。
- 如果此時你的程式依舊這樣報錯,就檢查你所有的實體,把所有的實體都檢查一遍,修改之後這時你的程式應該就沒有錯誤了。
mybatis傳入單個或多個參數
1、傳入一個參數時
id為mapper接口中的方法名,resultMap為返回類型,parameterType為輸入參數的類型
對應的xml配置:
2、傳入多個參數時
mapper接口配置:
對應的xml配置:
由於是多參數那麼就不能使用parameterType, 這裡用@Param來指定哪一個
一一一一