Спящий режим: проверьте, существует ли объект

Допустим, в БД хранятся объекты типа A . Вот 9X_hibernate как я загружаю конкретный из БД с помощью 9X_hibernate спящего режима:

org.hibernate.Session session = ...; long id = 1; A obj = session.load(A.class, id); 

Если объекта с id = 1 не 9X_hibernate существует, я получу ObjectNotFoundException . Но есть ли способ 9X_hibernate проверить, существует ли такой объект, не 9X_hibernate перехватывая исключение? Я бы хотел что-то 9X_hibernate вроде:

org.hibernate.Session session = ...; long id = 1; boolean exists = session.exists(A.class, id); if(exists){ // do smth..... } 

Не удалось найти документы для перехода 9X_hibernate в спящий режим ...

30
0
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: Спящий режим: проверьте, существует ли объект

вы можете использовать HQL для проверки существования 9X_hibernate объекта:

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, если данные 9X_hibernate не были найдены. Используя HQL, вы можете 9X_hibernate создавать более сложные критерии запроса.

48
0

Ответ #2

Ответ на вопрос: Спящий режим: проверьте, существует ли объект

Вы можете использовать session.get:

public Object get(Class clazz, Serializable id) throws HibernateException 

Он вернет null, если 9X_hibernate объект не существует в базе данных. Дополнительную 9X_hibernate информацию можно найти в Hibernate API Documentation.

26
2

  • вам не следует использовать этот метод! Поскольку он загружает всю су ...

Ответ #3

Ответ на вопрос: Спящий режим: проверьте, существует ли объект

Гибернация

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

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

Поскольку 9X_hibernate Hibernate является реализацией JPA, можно 9X_hibernate inject использовать EntityManager. Этот метод 9X_hibernate также имеет хорошую производительность, потому 9X_hibernate что он lazily fetches экземпляр:

public boolean exists(Class clazz, Object key) { try { return entitymanager.getReference(Entity.class, key) != null; } catch (EntityNotFoundException.class) { return false; } } 

10
1

  • Для последней строки условное выражение не требуется: ...

Ответ #4

Ответ на вопрос: Спящий режим: проверьте, существует ли объект

Немного упрощенный метод @Journeycorner

public boolean exists(Class
 clazz, Object idValue) { return getSession().createCriteria(clazz) .add(Restrictions.idEq(idValue)) .setProjection(Projections.id()) .uniqueResult() != null; } 

Также 9X_hibernate может быть полезен способ, описанный ниже. Имейте 9X_hibernate в виду, что этот метод можно использовать 9X_hibernate только с критериями, которые могут создавать 9X_hibernate не более одной записи (например, критерий 9X_hibernate Restrictions.idEq())

public static boolean uniqueExists(Criteria uniqueCriteria) { uniqueCriteria.setProjection(Projections.id()); return uniqueCriteria.uniqueResult() != null; } 

6
0