Spring Data JPA查询生成ignorecase以避免列数据为大写

时间:2017-11-04 06:09:57

标签: spring-data spring-data-jpa jpql

我正在使用spring数据jpa使用ignoreCase属性获取数据:

员工类:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "EMPLOYEE")
public class Employee {

@Id
private String id;


private String name;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Employee(String id, String name) {
    this.id = id;
    this.name = name;
}
}

测试用例获取存储值:

 @RunWith(SpringRunner.class)
 @SpringBootTest
 @DataJpaTest
 public class EmapleApplicationTests {


@Autowired
private EntityManager entityManager;

@Autowired
private EmployeeRespository employeeRespository;


@Test
public void loadEmployeeData() {
    entityManager.persist(new Employee("ID1", "abab"));
    Employee e = employeeRespository.findByIdIgnoreCase("id1");
    assertEquals("abab", e.getName());

}

}

当我使用findByIdIgnoreCase后,生成了以下查询:

select employee0_.id as id1_0_, employee0_.name as name2_0_ from employee employee0_ where upper(employee0_.id)=upper(?)

我不希望upper(employee0_.id)转换为大写,因为我知道数据在底层数据库中已经是大写的。我只想要传递的上部(?)来获取要转换为大写的数据,我想这样做以提高性能。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以编写本机查询或手动编写jpa查询,并假设数据库值始终为upercase。  无论如何它定义并不是一个很好的实践“假设”数据将以某种方式(大写)在数据库中,你确定你没有过度思考性能并在它给出任何迹象之前提出问题是一个问题?