Example usage for org.hibernate.persister.entity EntityPersister getIdentifier

List of usage examples for org.hibernate.persister.entity EntityPersister getIdentifier

Introduction

In this page you can find the example usage for org.hibernate.persister.entity EntityPersister getIdentifier.

Prototype

Serializable getIdentifier(Object entity, SharedSessionContractImplementor session);

Source Link

Document

Get the identifier of an instance (throw an exception if no identifier property)

Usage

From source file:com.autobizlogic.abl.data.hibernate.HibPersistentBeanFactory.java

License:Open Source License

/**
 * Create a PersistentBean from a Pojo or Map entity.
 *///from w  w w  . j  a  v a  2  s . c o m
public PersistentBean createPersistentBeanFromObject(Object bean, EntityPersister ep) {
    if (bean == null)
        return null;
    if (bean instanceof PersistentBean)
        throw new RuntimeException("Cannot create a PersistentBean from a PersistentBean: " + bean);
    if (!(bean instanceof Map)) {
        Class<?> epCls = ep.getMappedClass(EntityMode.POJO);
        Class<?> beanCls = bean.getClass();
        if (!epCls.isAssignableFrom(beanCls))
            throw new RuntimeException("Bean is of wrong type for the given persister: " + beanCls.getName()
                    + " vs " + epCls.getName());
    }
    Serializable pk;
    try {
        pk = ep.getIdentifier(bean, (SessionImplementor) session);
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
    return new HibPersistentBean(bean, pk, ep, session);
}

From source file:com.autobizlogic.abl.data.hibernate.HibPersistentBeanFactory.java

License:Open Source License

/**
 * Make a shallow copy of the given Pojo or Map object. 
 * The resulting PersistentBean will contain a copy
 * of all the attributes and single-valued relationships. Access to the collections will
 * be deferred to the original bean passed here.
 *//*from  w w w.ja  v  a 2s .  c o m*/
public PersistentBean createPersistentBeanCopyFromObject(Object bean, EntityPersister ep) {
    if (bean == null)
        return null;
    try {
        Serializable pk = ep.getIdentifier(bean, (SessionImplementor) session);
        return new HibPersistentBeanCopy(bean, pk, ep);
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }
}

From source file:com.autobizlogic.abl.data.hibernate.HibPersistentBeanFactory.java

License:Open Source License

/**
 * Make a shallow copy of the given Pojo or Map bean. The resulting PersistentBean will contain 
 * a copy of all the attributes and single-valued relationships. Access to the collections will
 * be deferred to the original Pojo or Map bean passed herein.
 *//*from w  ww .j  ava  2s.  c  o m*/
public static PersistentBean createPersistentBeanCopyFromState(Object[] state, Object entity,
        EntityPersister ep, Session session) {

    Serializable pk = ep.getIdentifier(entity, (SessionImplementor) session);
    return new HibPersistentBeanCopy(state, entity, pk, ep, session);
}

From source file:edu.utah.further.core.data.hibernate.listeners.PreUpdatePreventNullOverwriteListener.java

License:Apache License

@SuppressWarnings("resource")
@Override//from w w w. j  a  va 2 s. com
public boolean onPreUpdate(final PreUpdateEvent event) {
    if (log.isDebugEnabled()) {
        log.debug("Received pre-update event");
    }
    final EntityPersister entityPersister = event.getPersister();
    final EntityMode entityMode = entityPersister.guessEntityMode(event.getEntity());
    final Connection connection = getConnection(entityPersister);
    final StatelessSession session = entityPersister.getFactory().openStatelessSession(connection);
    session.beginTransaction();
    final Serializable entityId = entityPersister.getIdentifier(event.getEntity(),
            (SessionImplementor) session);
    final Object existingEntity = session.get(event.getEntity().getClass(), entityId);

    if (log.isDebugEnabled()) {
        log.debug("Loaded existing entity " + existingEntity);
    }

    boolean updatedExistingEntity = false;
    for (int i = 0; i < entityPersister.getPropertyNames().length; i++) {
        final Object oldPropValue = entityPersister.getPropertyValue(existingEntity, i, entityMode);
        if (oldPropValue == null) {

            if (log.isDebugEnabled()) {
                log.debug("Found a property in the existing " + "entity that was null, checking new entity");
            }

            final Object newPropValue = entityPersister.getPropertyValue(event.getEntity(), i, entityMode);

            if (!(newPropValue instanceof Collection<?>) && newPropValue != null) {

                if (log.isDebugEnabled()) {
                    log.debug("The new entity contains a non-null " + "value, updating existing entity");
                }

                entityPersister.setPropertyValue(existingEntity, i, newPropValue, entityMode);
                updatedExistingEntity = true;
            }
        }
    }

    if (updatedExistingEntity) {
        entityPersister.getFactory().getCurrentSession().cancelQuery();
        session.update(existingEntity);
    }

    session.getTransaction().commit();
    session.close();

    return updatedExistingEntity;
}

From source file:it.cilea.core.spring.dao.hibernate.IdTransferringMergeEventListener.java

License:Apache License

/**
 * Hibernate 3.1 implementation of ID transferral.
 *//* w ww .  j ava 2  s.  c o m*/
@Override
protected void entityIsTransient(MergeEvent event, Map copyCache) {
    super.entityIsTransient(event, copyCache);
    SessionImplementor session = event.getSession();
    EntityPersister persister = session.getEntityPersister(event.getEntityName(), event.getEntity());
    // Extract id from merged copy (which is currently registered with
    // Session).
    Serializable id = persister.getIdentifier(event.getResult(), session);
    // Set id on original object (which remains detached).
    persister.setIdentifier(event.getOriginal(), id, session);
}

From source file:org.babyfish.hibernate.collection.spi.persistence.SetBasePersistence.java

License:Open Source License

/**
 * This method is used to replace /*from ww w  .  ja v  a  2 s. com*/
 * "org.hibernate.collection.AbstractPersistentCollection#readElementExistence(Object element)"
 * @param element The example element to be read
 * @return The ref or readed element
 * <ul>
 *  <li>NonNull: Read successfully, check the value of ref to check the read value is null or not</li>
 *  <li>Null: Read failed</li>
 * </ul>
 */
@SuppressWarnings("unchecked")
public Ref<E> visionallyRead(E element) {

    Arguments.mustNotBeNull("element", element);
    String role = this.getNonNullRole();

    SessionImplementor session = this.getSession();
    if (session == null || !session.isOpen() || !session.isConnected()) {
        return null;
    }

    SessionFactoryImplementor sessionFactory = session.getFactory();
    QueryableCollection collection = (QueryableCollection) sessionFactory.getCollectionPersister(role);
    EntityPersister elementPersister = collection.getElementPersister();
    Object elementId = elementPersister.getIdentifier(element, this.getSession());
    if (elementId == null) {
        return new Ref<>();
    }
    if (elementPersister.getEntityMetamodel().getIdentifierProperty().getUnsavedValue()
            .isUnsaved((Serializable) elementId)) {
        return new Ref<>();
    }

    CriteriaImpl criteria = new CriteriaImpl(elementPersister.getEntityName(), session);

    /*
     * Add the condition of element.
     */
    criteria.add(Restrictions.idEq(elementId));

    //ownerKey, not ownerId
    Object ownerKey = collection.getCollectionType().getKeyOfOwner(this.getOwner(), session);
    //In Hibernate, isOneToMany means that there is no middle table
    //The @OneToMany of JPA with middle table is consider as many-to-many in Hibernate
    if (sessionFactory.getCollectionPersister(role).isOneToMany()) {
        String[] joinOwnerColumns = collection.getKeyColumnNames();
        StringBuilder sqlBuilder = new StringBuilder();
        for (int i = 0; i < joinOwnerColumns.length; i++) {
            if (i != 0) {
                sqlBuilder.append(" and ");
            }
            sqlBuilder.append("{alias}.").append(joinOwnerColumns[i]).append(" = ?");
        }
        criteria.add(Restrictions.sqlRestriction(sqlBuilder.toString(), ownerKey, collection.getKeyType()));
    } else {
        String lhsPropertyName = collection.getCollectionType().getLHSPropertyName();
        int lhsPropertyIndex = -1;
        if (lhsPropertyName != null) {
            String[] propertyNames = collection.getOwnerEntityPersister().getPropertyNames();
            for (int i = propertyNames.length - 1; i >= 0; i--) {
                if (propertyNames[i].equals(lhsPropertyName)) {
                    lhsPropertyIndex = i;
                    break;
                }
            }
        }
        String[] lhsColumnNames = JoinHelper.getLHSColumnNames(collection.getCollectionType(), lhsPropertyIndex,
                (OuterJoinLoadable) elementPersister, sessionFactory);
        String[] joinElementColumnNames = collection.getElementColumnNames();
        String[] joinOwnerColumnNames = collection.getKeyColumnNames();
        StringBuilder subQueryBuilder = new StringBuilder();
        subQueryBuilder.append("exists(select * from ").append(collection.getTableName()).append(" as ")
                .append(MIDDLE_TABLE_ALIAS).append(" where ");
        for (int i = 0; i < joinElementColumnNames.length; i++) {
            if (i != 0) {
                subQueryBuilder.append(" and ");
            }
            subQueryBuilder.append("{alias}.").append(lhsColumnNames[i]).append(" = ")
                    .append(MIDDLE_TABLE_ALIAS).append('.').append(joinElementColumnNames[i]);
        }
        for (int i = 0; i < joinOwnerColumnNames.length; i++) {
            subQueryBuilder.append(" and ").append(MIDDLE_TABLE_ALIAS).append(".")
                    .append(joinOwnerColumnNames[i]).append(" = ?");
        }
        subQueryBuilder.append(')');
        criteria.add(
                Restrictions.sqlRestriction(subQueryBuilder.toString(), ownerKey, collection.getKeyType()));
    }
    FlushMode oldFlushMode = session.getFlushMode();
    session.setFlushMode(FlushMode.MANUAL);
    try {
        return new Ref<>((E) criteria.uniqueResult());
    } finally {
        session.setFlushMode(oldFlushMode);
    }
}

From source file:org.eclipse.emf.cdo.examples.hibernate.server.CDOExampleUUIDHexGenerator.java

License:Open Source License

@Override
public Serializable generate(SessionImplementor session, Object obj) {
    final EntityPersister entityPersister = session.getEntityPersister(null, obj);
    final Serializable id = entityPersister.getIdentifier(obj, session);
    if (id != null) {
        return id;
    }/*from w  ww. j a  v a  2  s  . c  o m*/

    return super.generate(session, obj);
}

From source file:org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOUUIDHexGenerator.java

License:Open Source License

@Override
public Serializable generate(SessionImplementor session, Object obj) {
    if (!(obj instanceof CDORevision)) {
        return super.generate(session, obj);
    }//www. j  a  va 2  s.  c  o m

    final EntityPersister entityPersister = session.getEntityPersister(null, obj);
    final Serializable id = entityPersister.getIdentifier(obj, session);
    if (id != null) {
        return id;
    }

    return super.generate(session, obj);
}

From source file:org.eclipse.emf.teneo.hibernate.HbUtil.java

License:Open Source License

private static EObject merge(SessionImplementor sessionImplementor, EObject eObject,
        Map<EObject, EObject> copyCache, int maxMergeLevel, int currentMergeLevel) {
    if (copyCache.containsKey(eObject)) {
        return copyCache.get(eObject);
    }/*www.  ja va2s.c  om*/
    final String entityName = sessionImplementor.guessEntityName(eObject);
    final EntityPersister persister = sessionImplementor.getEntityPersister(entityName, eObject);
    final Serializable id = persister.getIdentifier(eObject, sessionImplementor);
    if (id != null) {
        final EObject source = (EObject) ((Session) sessionImplementor).get(entityName, id);
        copyCache.put(eObject, source);
        if (maxMergeLevel == currentMergeLevel) {
            return source;
        }
        // now copy the features
        for (EStructuralFeature eFeature : source.eClass().getEAllStructuralFeatures()) {
            if (eFeature instanceof EAttribute) {
                source.eSet(eFeature, eObject.eGet(eFeature));
            } else if (eFeature.isMany()) {
                final List<EObject> newValues = new ArrayList<EObject>();
                @SuppressWarnings("unchecked")
                final List<EObject> currentValues = (List<EObject>) eObject.eGet(eFeature);
                for (EObject currentValue : currentValues) {
                    newValues.add(merge(sessionImplementor, currentValue, copyCache, maxMergeLevel,
                            currentMergeLevel + 1));
                }
                source.eSet(eFeature, newValues);
            } else {
                source.eSet(eFeature, merge(sessionImplementor, (EObject) eObject.eGet(eFeature), copyCache,
                        maxMergeLevel, currentMergeLevel + 1));
            }
        }
        return source;
    } else {
        return eObject;
    }
}

From source file:org.eclipse.emf.teneo.hibernate.mapping.identifier.IdentifierUtil.java

License:Open Source License

/** Returns the id of the passed object */
@SuppressWarnings("deprecation")
public static Serializable getID(EObject eobj, HbDataStore hd) {
    final String entityName = hd.getEntityNameStrategy().toEntityName(eobj.eClass());
    final EntityPersister entityPersister = ((SessionFactoryImpl) hd.getSessionFactory())
            .getEntityPersister(entityName);
    return entityPersister.getIdentifier(eobj, EntityMode.MAP);
}