/** * Disconnect a pre-existing Hibernate Session on transaction completion, * returning its database connection but preserving its entity state. * <p>The default implementation simply calls {@link Session#disconnect()}. * Subclasses may override this with a no-op or with fine-tuned disconnection logic. * @param session the Hibernate Session to disconnect * @see Session#disconnect() */ protected void disconnectOnCompletion(Session session) { session.disconnect(); }
@Override public void destroy() { if (this.sessionFactory != null) { this.sessionFactory.close(); } }
public HibernateJdbcException(JDBCException ex) { super("JDBC exception on Hibernate data access: SQLException for SQL [" + ex.getSQL() + "]; SQL state [" + ex.getSQLState() + "]; error code [" + ex.getErrorCode() + "]; " + ex.getMessage(), ex); }
@Override public Spell findByName(String name) { Transaction tx = null; Spell result = null; try (Session session = getSessionFactory().openSession()) { tx = session.beginTransaction(); Criteria criteria = session.createCriteria(persistentClass); criteria.add(Restrictions.eq("name", name)); result = (Spell) criteria.uniqueResult(); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw e; } return result; } }
@Override public Person findByName(String name) { return (Person) this.sessionFactory.getCurrentSession().createQuery( "from Person person where person.name = :name").setParameter("name", name).getSingleResult(); }
@Override @SuppressWarnings({"unchecked", "deprecation"}) public <T> List<T> loadAll(final Class<T> entityClass) throws DataAccessException { return nonNull(executeWithNativeSession((HibernateCallback<List<T>>) session -> { Criteria criteria = session.createCriteria(entityClass); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); prepareCriteria(criteria); return criteria.list(); })); }
@Override public Person save(Person person) { this.sessionFactory.getCurrentSession().save(person); return person; }
@Override public void delete(final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { checkWriteOperationAllowed(session); if (lockMode != null) { session.buildLockRequest(new LockOptions(lockMode)).lock(entity); } session.delete(entity); return null; }); }
@Override public Filter enableFilter(String filterName) throws IllegalStateException { Session session = obtainSessionFactory().getCurrentSession(); Filter filter = session.getEnabledFilter(filterName); if (filter == null) { filter = session.enableFilter(filterName); } return filter; }
@Override public void update(final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { checkWriteOperationAllowed(session); session.update(entity); if (lockMode != null) { session.buildLockRequest(new LockOptions(lockMode)).lock(entity); } return null; }); }
public boolean hasHibernateManagedTransaction() { return (this.sessionHolder != null && this.sessionHolder.getSession().getTransaction().getStatus() == TransactionStatus.ACTIVE); }
@Override public void lock(final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { session.buildLockRequest(new LockOptions(lockMode)).lock(entity); return null; }); }
public HibernateOptimisticLockingFailureException(StaleObjectStateException ex) { super(ex.getEntityName(), ex.getIdentifier(), ex); }
public HibernateObjectRetrievalFailureException(UnresolvableObjectException ex) { super(ex.getEntityName(), ex.getIdentifier(), ex.getMessage(), ex); }
public HibernateObjectRetrievalFailureException(WrongClassException ex) { super(ex.getEntityName(), ex.getIdentifier(), ex.getMessage(), ex); }
public HibernateOptimisticLockingFailureException(StaleStateException ex) { super(ex.getMessage(), ex); }
public HibernateQueryException(QueryException ex) { super(ex.getMessage(), ex); }
@Override public void delete(final String entityName, final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { checkWriteOperationAllowed(session); if (lockMode != null) { session.buildLockRequest(new LockOptions(lockMode)).lock(entityName, entity); } session.delete(entityName, entity); return null; }); }
@Override public void update(final String entityName, final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { checkWriteOperationAllowed(session); session.update(entityName, entity); if (lockMode != null) { session.buildLockRequest(new LockOptions(lockMode)).lock(entityName, entity); } return null; }); }
@Override public void lock(final String entityName, final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(session -> { session.buildLockRequest(new LockOptions(lockMode)).lock(entityName, entity); return null; }); }