2015-12-11 5 views
0

Я столкнулся со странной ситуацией, когда я использую именованный запрос или собственный запрос для фильтрации данных с использованием знака «<» или больше, чем «>». Например, у меня есть каталог кодов, и я делаю навигацию по этим кодам, а для первого кода «000481» следующий код «-PR. 2L» (это правильно), но предыдущий из «-PR 2L "- это" PR. 2L ", а не" 000481 ", как правильно.EclipseLink меньше, чем предложение не работает

Если я запустил запрос с помощью команды Execute ... результат правильный. Если это важно, я использую сервер Mssql 2005 и для обеспечения устойчивости EclipseLink jpa 2.1

Спасибо!

@SuppressWarnings("unchecked") 
public Cods previous(String cod, String codUnit) { 
    EntityManager em = getEntityManager(); 
    em.setProperty("codUnit", codUnit); 
    Query query = em.createQuery("SELECT c FROM Cods c WHERE c.cod < :cod ORDER BY c.cod DESC"); 
    query.setParameter("cod", cod); 
    Cods p = null; 
    try { 
     List<Cods> lP = query.setMaxResults(1).getResultList(); 
     if (!lP.isEmpty()) { 
      p = (Cods) lP.get(0); 
     } 
    } finally { 
     em.close(); 
    } 


    return p; 
} 
+0

Я думаю, что проблема связана с знаком, который находится в треке "-PR. 2L" – bacclaudiu

ответ

0

Если я изменяю код, как показано ниже, проблема была решена. Но я не знаю, почему первый код идет не так. Если у кого-то есть идея, я буду рад. Спасибо!

public Cods previous(String cod, String codUnit) { 
    EntityManager em = getEntityManager(); 
    em.setProperty("codUnit", codUnit); 
    Query query = em.createQuery("SELECT c FROM Cods c WHERE c.cod < cast(:cod as varchar(15)) ORDER BY c.cod DESC"); 
    query.setParameter("cod",cod); 
    Cods p = null; 
    try { 
     List<Cods> lP = query.setMaxResults(1).getResultList(); 
     if (!lP.isEmpty()) { 
      p = lP.get(0); 
     } 
    } finally { 
     em.close(); 
    } 

    return p; 
} 
Смежные вопросы