List of usage examples for org.hibernate.persister.entity EntityPersister getIdentifier
Serializable getIdentifier(Object entity, SharedSessionContractImplementor session);
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); }