2

我需要验证数据库中是否存在记录,但无论我传递给以下代码的 id 是什么,它都不会显示任何内容。记录存在或不存在。

       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("<");
      }
4

4 回答 4

9

Try to use projection for getting result.

    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");
   }
于 2013-07-24T04:44:55.840 回答
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
}
于 2013-07-24T04:23:27.530 回答
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");
 }
于 2018-02-28T18:43:30.253 回答
-1

如果您有 EntityManager 实例,那么您可以这样做。

entityManager.find(Users.class, 1002L);

第二个参数是记录的主键 ID。

如果不存在记录,将返回 null。如果 primaryKey 未被推断/无法识别,将抛出 IllegalArgumentException。

于 2019-12-29T18:36:36.000 回答