2017-11-04 127 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。 無論如何,它肯定不是一個很好的實踐「假設」的數據將在數據庫中以某種方式(大寫),你確定你沒有過度考慮性能,並在它給出任何符號之前解決問題是一個問題?