随记Spring Data JPA的几个坑

前篇

No.1:之前项目中hibernate对Integer参数注入String类型值进行模糊查询,并不会抛出异常。最近接触Spring Data JPA在写demo的过程中发现JPA对Integer的模糊查询支持比较差,无论是简单查询还是复杂查询均不支持。
注:equal无影响,仍可使用String参数注入
No.2:自定义接口方法中,属性有几个,则参数要有几个。
注意:多了也不行
No.3:查看JpaRepository具体实现类可发现在repository层已加事务,但是如何在service层控制事务?:

@Transactional
  public  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类型):


image.png

复杂查询(假设sex也是zipCode):


随记Spring Data JPA的几个坑_第1张图片
image.png

equal:
随记Spring Data JPA的几个坑_第2张图片
image.png

mysql:


随记Spring Data JPA的几个坑_第3张图片
image.png

测试No.2

两个属性,一个参数


随记Spring Data JPA的几个坑_第4张图片
image.png

两个属性,两个参数


随记Spring Data JPA的几个坑_第5张图片
image.png

两个属性,三个参数
随记Spring Data JPA的几个坑_第6张图片
image.png

测试No.3(测试原因是因为底层已有@Transactional)

正常操作结果会导致数据不回滚,正常插入


随记Spring Data JPA的几个坑_第7张图片
image.png

增加@Transactional,则数据回滚


随记Spring Data JPA的几个坑_第8张图片
image.png

总结:

1.虽然说正常情况下Integer是不应该模糊查询的,但是也许就有用到。当使用JPA开发项目时,可能需要模糊查询的字段,尽量用String。

  1. 严格按照Spring Data JPA规范

你可能感兴趣的:(随记Spring Data JPA的几个坑)