隨記Spring Data JPA的幾個坑

weixin_34007291發表於2018-02-02

前篇

No.1:之前專案中hibernate對Integer引數注入String型別值進行模糊查詢,並不會丟擲異常。最近接觸Spring Data JPA在寫demo的過程中發現JPA對Integer的模糊查詢支援比較差,無論是簡單查詢還是複雜查詢均不支援。
注:equal無影響,仍可使用String引數注入
No.2:自定義介面方法中,屬性有幾個,則引數要有幾個。
注意:多了也不行
No.3:檢視JpaRepository具體實現類可發現在repository層已加事務,但是如何在service層控制事務?:

@Transactional
  public <S extends T> S save(S entity) {
    if(this.entityInformation.isNew(entity)) {
      this.em.persist(entity);
        return entity;
      } else {
        return this.em.merge(entity);
      }
    }

測試No.1

簡單查詢(zipCode是Integer型別):


5005414-09c8e1f3384ff9f6.png
image.png

複雜查詢(假設sex也是zipCode):


5005414-035ea0c8470153ce.png
image.png

equal:
5005414-c45421017026ca46.png
image.png

mysql:


5005414-861759e960707246.png
image.png

測試No.2

兩個屬性,一個引數


5005414-198053e85baf49a4.png
image.png

兩個屬性,兩個引數


5005414-246475a6c45f4299.png
image.png

兩個屬性,三個引數
5005414-44929b1a5136da13.png
image.png

測試No.3(測試原因是因為底層已有@Transactional)

正常操作結果會導致資料不回滾,正常插入


5005414-952521554833b522.png
image.png

增加@Transactional,則資料回滾


5005414-602f4f2b53c963fd.png
image.png

總結:

1.雖然說正常情況下Integer是不應該模糊查詢的,但是也許就有用到。當使用JPA開發專案時,可能需要模糊查詢的欄位,儘量用String。

  1. 嚴格按照Spring Data JPA規範

相關文章