26 hibernate
假设,类型A的对象存储在DB中.这是我使用hibernate从DB加载特定的方法:
org.hibernate.Session session = ...;
long id = 1;
A obj = session.load(A.class, id);
如果id = 1的对象不存在,我将得到ObjectNotFoundException.但有没有办法检查这样的对象是否存在而不必捕获异常?我想拥有的是:
org.hibernate.Session session = ...;
long id = 1;
boolean exists = session.exists(A.class, id);
if(exists){
 // do smth.....
}
找不到hibernate docs ...
ArB*_*rBR 46
您可以使用HQL来检查对象是否存在:
public Boolean exists (DTOAny instance) {
    Query query = getSession().             
    createQuery("select 1 from DTOAny t where t.key = :key");
        query.setString("key", instance.getKey() );
    return (query.uniqueResult() != null);
}
如果没有找到数据,则Hibernates uniqueResult()方法返回null.通过使用HQL,您可以创建更复杂的查询标准.
Jua*_*nma 25
你可以使用session.get:
public Object get(Class clazz,
                  Serializable id)
           throws HibernateException
如果数据库中不存在该对象,它将返回null.您可以在Hibernate API文档中找到更多信息.
Jou*_*ner 10
过冬
仅获取最佳性能的关键:
public boolean exists(Class clazz, String idKey, Object idValue) {
    return getSession().createCriteria(clazz)
            .add(Restrictions.eq(idKey, idValue))
            .setProjection(Projections.property(idKey))
            .uniqueResult() != null;
}
JPA
由于Hibernate是JPA的一个实现,因此可以注入一个EntityManager.此方法也具有良好的性能,因为它懒惰地获取实例:
public boolean exists(Class clazz, Object key) {
   try {
      return entitymanager.getReference(Entity.class, key) != null;
   } catch (EntityNotFoundException.class) {
      return false;
   }
}
@Journeycorner 的一个简化方法
public boolean exists(Class<?> clazz, Object idValue) {
    return getSession().createCriteria(clazz)
            .add(Restrictions.idEq(idValue))
            .setProjection(Projections.id())
            .uniqueResult() != null;
}
下面的方法也很有用。请记住,此方法只能与不能产生超过一条记录的标准一起使用(如Restrictions.idEq()标准)
public static boolean uniqueExists(Criteria uniqueCriteria) {
    uniqueCriteria.setProjection(Projections.id());
    return uniqueCriteria.uniqueResult() != null;
}
| 归档时间: | 
 | 
| 查看次数: | 67354 次 | 
| 最近记录: |