2017-11-04 1110 views
0

我使用的是春天的数据JPA获取使用ignoreCase属性数据为大写:春数据JPA查询生成忽略大小写,以避免列数据

Employee类:

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)转换为大写,因为我知道数据已经在底层数据库中大写了。我只想要传递的上层(?)来获取要转换大写的数据,我想这样做来提高性能。有没有办法做到这一点?

回答

0

你可以编写一个本地查询,或者你手工编写jpa查询,并且假设数据库值总是为upercase。 无论如何,它肯定不是一个很好的实践“假设”的数据将在数据库中以某种方式(大写),你确定你没有过度考虑性能,并在它给出任何符号之前解决问题是一个问题?