/** * Create the identity map for the unit of work. * PERF: UOW uses a special map to avoid locks, always full, and can use special weak refs. */ public IdentityMap buildNewIdentityMapForUnitOfWork(UnitOfWorkImpl unitOfwork, ClassDescriptor descriptor) { ReferenceMode mode = unitOfwork.getReferenceMode(); if (mode == ReferenceMode.FORCE_WEAK) { return new WeakUnitOfWorkIdentityMap(32, descriptor); } else if ((mode == ReferenceMode.WEAK) // Only allow weak if using change tracking. && descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { return new WeakUnitOfWorkIdentityMap(32, descriptor); } else { return new UnitOfWorkIdentityMap(32, descriptor); } }
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
if (this.isNestedUnitOfWork && (concreteDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy())) { throw ValidationException.nestedUOWNotSupportedForAttributeTracking();
if (!descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { backupClone = builder.buildNewInstance();
newAccessor.setValueHolderProperty(true); newAccessor.setChangeTracking(ormDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()); oxmMapping.setAttributeAccessor(newAccessor); ormAccessor.setChangeTracking(containerDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()); ormAccessor.setValueHolderProperty(ormContainerMapping instanceof OneToOneMapping && ((OneToOneMapping)ormContainerMapping).usesIndirection()); if(oxmMapping instanceof XMLCompositeObjectMapping) {
if (isNestedUnitOfWork() && (concreteDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy())) { throw ValidationException.nestedUOWNotSupportedForAttributeTracking();
newAccessor.setValueHolderProperty(true); newAccessor.setChangeTracking(ormDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()); oxmMapping.setAttributeAccessor(newAccessor); ormAccessor.setChangeTracking(containerDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()); ormAccessor.setValueHolderProperty(ormContainerMapping instanceof OneToOneMapping && ((OneToOneMapping)ormContainerMapping).usesIndirection()); if(oxmMapping.isAbstractCompositeObjectMapping()) {
/** * INTERNAL: (Public to allow testing to access) * Return a new empty identity map to cache instances of the class. */ public IdentityMap buildNewIdentityMap(ClassDescriptor descriptor) { if (this.session.isUnitOfWork()) { ReferenceMode mode = ((UnitOfWorkImpl)this.session).getReferenceMode(); if (mode == ReferenceMode.FORCE_WEAK){ return new WeakUnitOfWorkIdentityMap(32, descriptor, this.session, true); } else if (mode == ReferenceMode.WEAK && descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { return new WeakUnitOfWorkIdentityMap(32, descriptor, this.session, true); } else { return new UnitOfWorkIdentityMap(32, descriptor, this.session, true); } } // Remote session has its own setting. if (this.session.isRemoteSession()) { return buildNewIdentityMap(descriptor.getRemoteIdentityMapClass(), descriptor.getRemoteIdentityMapSize(), descriptor, true); } else { return buildNewIdentityMap(descriptor.getIdentityMapClass(), descriptor.getIdentityMapSize(), descriptor, this.session.isIsolatedClientSession()); } }
/** * INTERNAL: (Public to allow testing to access) * Return a new empty identity map to cache instances of the class. */ public IdentityMap buildNewIdentityMap(ClassDescriptor descriptor) { if (this.session.isUnitOfWork()) { ReferenceMode mode = ((UnitOfWorkImpl)this.session).getReferenceMode(); if (mode == ReferenceMode.FORCE_WEAK){ return new WeakUnitOfWorkIdentityMap(32, descriptor, this.session, true); } else if (mode == ReferenceMode.WEAK && descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()) { return new WeakUnitOfWorkIdentityMap(32, descriptor, this.session, true); } else { return new UnitOfWorkIdentityMap(32, descriptor, this.session, true); } } // Remote session has its own setting. if (this.session.isRemoteSession()) { return buildNewIdentityMap(descriptor.getRemoteIdentityMapClass(), descriptor.getRemoteIdentityMapSize(), descriptor, true); } else { return buildNewIdentityMap(descriptor.getIdentityMapClass(), descriptor.getIdentityMapSize(), descriptor, this.session.isIsolatedClientSession()); } }
/** * INTERNAL: (Public to allow testing to access) * Return a new empty identity map to cache instances of the class. */ public IdentityMap buildNewIdentityMap(ClassDescriptor descriptor) { if (this.session.isUnitOfWork()) { if (((UnitOfWorkImpl)this.session).getReferenceMode() == ReferenceMode.FORCE_WEAK){ return new WeakUnitOfWorkIdentityMap(32, descriptor); } else if (((UnitOfWorkImpl)getSession()).getReferenceMode() == ReferenceMode.WEAK && descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){ return new WeakUnitOfWorkIdentityMap(32, descriptor); } else { return new UnitOfWorkIdentityMap(32, descriptor); } } // Remote session has its own setting. if (this.session.isRemoteSession()) { return buildNewIdentityMap(descriptor.getRemoteIdentityMapClass(), descriptor.getRemoteIdentityMapSize(), descriptor); } else { return buildNewIdentityMap(descriptor.getIdentityMapClass(), descriptor.getIdentityMapSize(), descriptor); } }
if ( newValue == null ) { // attribute set to null changeRecord.setChangedObject(null); if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){ if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){ if(oldValue != null) { if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){
if ( newValue == null ) { // attribute set to null changeRecord.setChangedObject(null); if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){ if(((ChangeTracker)oldValue)._persistence_getPropertyChangeListener() != null) { if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){ if(oldValue != null && ((ChangeTracker)oldValue)._persistence_getPropertyChangeListener() != null) { if (referenceDescriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy()){
if (fireChangeEvents && (getDescriptor().getObjectChangePolicy().isAttributeChangeTrackingPolicy())) {
if (fireChangeEvents && (getDescriptor().getObjectChangePolicy().isAttributeChangeTrackingPolicy())) {
i++; if (fireCollectionChangeEvents && (this.descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy())) {
if (fireCollectionChangeEvents && (this.descriptor.getObjectChangePolicy().isAttributeChangeTrackingPolicy())) {