2011-10-08 3 views
0

Можно ли удалить кеш для конкретного именованного запроса? Я действительно не хочу удалять для всех запросов ... Или есть ли другой способ обхода?hibernate createQuery ошибка?

Это не работает, даже если я использую обычный класс Query ...

Я использую спящий режим 3.6, GlassFish 3.1.1, это приложение Java EE (код из модуля EJB)

у меня есть что-то вроде этого:

public User getUserByName(String username) { 
    try { 
     return (User) em.createNamedQuery("User.getUserByName").setParameter("username", username).getSingleResult(); 
    } catch (NoResultException e) { 
     return null; 
    } 
} 
//... 
if(getUserByName(entity.getUsername()!=null) { 
    em.persist(entity); 
} 
//... 
// username added in database (checked) 
if(getUserByName(entity.getUsername())==null) { 
    //something else 
} 

во второй раз я использую «getUserByName» снова .. пустой ... почему?

Я имею в виду, что это модуль кэш (потому что, если я изложу мой провайдер EclipseLink он работает, как это должно быть) ...

Я использую спячку это поиск ..

ответ

1

С EclipseLink вы можете сделать это:

Query query = em.createNamedQuery("Users.findByUsername"); 
query.setHint("javax.persistence.cache.storeMode", "REFRESH"); 

Для зимуют намек: org.hibernate.cacheMode «Override режим кэширования для этого запроса (например, CacheMode.REFRESH.)» Для дальнейшего чтения и понимания: old article

+0

спасибо. не знал об этом .. Я попробую. – Alex

+0

Приветствую вас :) В любом случае, здесь вы найдете рекомендации для hibernate query: [link] (http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/objectstate.html#d0e1215) – zeller

Смежные вопросы