2013-07-24 7 views
0

Мне нужно проверить существование записи в базе данных, но независимо от идентификатора, который я передаю в следующий код, он ничего не показывает. либо запись существует, либо нет.Как проверить наличие записи в базе данных?

 session = HibernateUtil.getSession(); 
     session.beginTransaction(); 
     Query q = session.createQuery("select count(*) from Users where id = :id"); 
     q.setInteger("id", id); 
     Integer count = (Integer)q.uniqueResult(); 
     if(count > 0) { 
      System.err.println(">"); 
     } 
     else { 
      System.err.println("<"); 
     } 
     session.getTransaction().commit(); 
     session.close(); 

Я использовал следующий код, как хорошо, но по-прежнему имеют те же проблемы

try{ 
     session = HibernateUtil.getSession(); 
     session.beginTransaction(); 
     Users users = null; 
     users = (Users) session.load(Users.class, id); 
    }catch(Exception e){ 
       System.err.println("<"); 
     } 
+0

который один выполнить для вас, если либо –

+0

ни один .... –

ответ

7

Попробуйте использовать проекцию для получения результата.

session = sessionFactory.openSession(); 
    session.beginTransaction(); 
    Criteria criteria = session.createCriteria(Users.class); 
    criteria.add(Restrictions.eq("Id", Id)); 
    criteria.setProjection(Projections.rowCount()); 
    long count = (Long) criteria.uniqueResult(); 
    session.getTransaction().commit(); 
    if(count != 0){ 
     System.out.println("present"); 
    else{ 
     System.out.println("absent"); 
    } 
+0

Попробуйте использовать этот int count = ((Lon g) criteria.uniqueResult()). intValue(); – MayurB

+0

В чем разница между нашими кодами? Я не получил причину проблемы, также посмотрите на этот вопрос http://stackoverflow.com/questions/17542157/how-to-avoid-nested-transactions-not-supported-error –

+1

UniqueResult может вернуть размер, который не может быть суффиксом Interger.And Второй код Session.Load не запускает исключение, пока вы не получите доступ к любому методу на Loaded object. – MayurB

0

Вы можете просто использовать Session.load метод, если ни один не существует HibernateException будет выброшено

Session session = // get session.. 
Users u = null; 
try { 
    u = (Users) session.load(Users.class, userId); 
} catch (HibernateException e) { 
    // No Users with id 'userId' exists 
} 
+0

я изменил его и использовал } catch (Exception e), но не решил его –

+0

Session.load предоставит вам прокси-объект класса Users.It не будет вызывать ObjectNotFountException до тех пор, пока вы не выполните какую-либо операцию над объектами пользователя u ... – MayurB

+0

Также, согласно документам, session.get() 'предпочитает проверять существование, а не' load() ' – Vrushank

0

метод использования session.get, и использовать только исключение для этого случая

try 
    {s = (student) session1.get(student.class, 16); 
    System.out.println("the result is"+s.marks); 
    } 


catch(Exception e) 
    { 

    System.out.println("none"); 
}