/** * Return all locally cross-referenced primary keys for the given persister. Used as part of load * synchronization process. * * @param persister The persister representing the entity type. * * @return The primary keys * * @see org.hibernate.NaturalIdLoadAccess#setSynchronizationEnabled */ public Collection<Serializable> getCachedPkResolutions(EntityPersister persister) { persister = locatePersisterForKey( persister ); Collection<Serializable> pks = null; final NaturalIdResolutionCache entityNaturalIdResolutionCache = naturalIdResolutionCacheMap.get( persister ); if ( entityNaturalIdResolutionCache != null ) { pks = entityNaturalIdResolutionCache.pkToNaturalIdMap.keySet(); } if ( pks == null || pks.isEmpty() ) { return java.util.Collections.emptyList(); } else { return java.util.Collections.unmodifiableCollection( pks ); } }
/** * Given a persister and primary key, find the locally cross-referenced natural id. * * @param persister The persister representing the entity type. * @param pk The entity primary key * * @return The corresponding cross-referenced natural id values, or {@code null} if none */ public Object[] findCachedNaturalId(EntityPersister persister, Serializable pk) { persister = locatePersisterForKey( persister ); final NaturalIdResolutionCache entityNaturalIdResolutionCache = naturalIdResolutionCacheMap.get( persister ); if ( entityNaturalIdResolutionCache == null ) { return null; } final CachedNaturalId cachedNaturalId = entityNaturalIdResolutionCache.pkToNaturalIdMap.get( pk ); if ( cachedNaturalId == null ) { return null; } return cachedNaturalId.getValues(); }
/** * As part of "load synchronization process", if a particular natural id is found to have changed we need to track * its invalidity until after the next flush. This method lets the "load synchronization process" indicate * when it has encountered such changes. * * @param persister The persister representing the entity type. * @param invalidNaturalIdValues The "old" natural id values. * * @see org.hibernate.NaturalIdLoadAccess#setSynchronizationEnabled */ public void stashInvalidNaturalIdReference(EntityPersister persister, Object[] invalidNaturalIdValues) { persister = locatePersisterForKey( persister ); final NaturalIdResolutionCache entityNaturalIdResolutionCache = naturalIdResolutionCacheMap.get( persister ); if ( entityNaturalIdResolutionCache == null ) { throw new AssertionFailure( "Expecting NaturalIdResolutionCache to exist already for entity " + persister.getEntityName() ); } entityNaturalIdResolutionCache.stashInvalidNaturalIdReference( invalidNaturalIdValues ); }
persister = locatePersisterForKey( persister ); validateNaturalId( persister, naturalIdValues );
persister = locatePersisterForKey( persister ); validateNaturalId( persister, naturalIdValues );