Jpa 不区分大小写的查询

Jpa 不区分大小写的查询,jpa,case-insensitive,Jpa,Case Insensitive,我有一些车票号码,可能有数字和字母混合。我将把ticketNumberIds传递给这个方法(用户输入),我希望它查询Oracle数据库,并让查询获取大小写不同的票据 如何使以下查询不区分大小写 public List<TicketDO> getTicketDOsById(final List<String> ticketNumberIds) { String myQuery = "from TicketDO t where t.ticketNumberId in

我有一些车票号码,可能有数字和字母混合。我将把
ticketNumberIds
传递给这个方法(用户输入),我希望它查询Oracle数据库,并让查询获取大小写不同的票据

如何使以下查询不区分大小写

public List<TicketDO> getTicketDOsById(final List<String> ticketNumberIds) {

    String myQuery = "from TicketDO t where t.ticketNumberId in (:ticketNumberIds)";

    return getEntityManager().createQuery(myQuery).setParameter("ticketNumberIds", ticketNumberIds)
    .getResultList();

}
public List getTicketDOsById(最终列表ticketnumberid){
字符串myQuery=“from ticketdot,其中t.ticketNumberId位于(:ticketNumberIds)”;
返回getEntityManager().createQuery(myQuery).setParameter(“ticketNumberId”,ticketNumberId)
.getResultList();
}

您可以使用UPPER执行不区分大小写的查询

public List<TicketDO> getTicketDOsById(final List<String> ticketNumberIds) {

    String myQuery = "from TicketDO t where UPPER(t.ticketNumberId) in (:ticketNumberIds)";
    List<String> upperNumbers = new ArrayList<String>();
    for (String number : ticketNumberIds) {
        upperNumbers.add(number.toUppercase());
    }
    return getEntityManager().createQuery(myQuery).setParameter("ticketNumberIds", upperNumbers)
    .getResultList();

}
public List getTicketDOsById(最终列表ticketnumberid){
字符串myQuery=“from TicketDO t where UPPER(t.ticketNumberId)in(:ticketNumberIds)”;
List uppernumber=new ArrayList();
for(字符串编号:ticketNumberIds){
add(number.toUppercase());
}
返回getEntityManager()
.getResultList();
}

这对我不起作用,我在Derby数据库上运行。这可能是由于某种方言差异造成的吗?我也在使用Derby,它工作得很好。需要详细说明吗?请注意,这可能会强制在DB中进行表扫描,因此如果您在TicketNumber ID上有索引,则可能不会使用它。为了避免此问题,您可以在实体setter中转换为大写,以便在.persist()期间所有票证号都以大写形式存储。然后,在上面的代码中不再需要函数UPPER(),因此该列上的任何索引仍然可用。