0
		// we need to dirty check collections, since they can cause an owner 
		// version number increment 
		 
		// we need to dirty check many-to-ones with not-found="ignore" in order  
		// to update the cache (not the database), since in this case a null 
		// entity reference can lose information 
		 
		boolean alwaysDirtyCheck = type.isAssociationType() && 
				( (AssociationType) type ).isAlwaysDirtyChecked(); 
 
		return new StandardProperty(
				property.getName(),
				property.getNodeName(),
				type,
				lazyAvailable && property.isLazy(),
				property.isInsertable(),
				property.isUpdateable(),
		        property.getGeneration() == PropertyGeneration.INSERT || property.getGeneration() == PropertyGeneration.ALWAYS,
				property.getGeneration() == PropertyGeneration.ALWAYS,
				property.isOptional(),
				alwaysDirtyCheck || property.isUpdateable(),
				property.isOptimisticLocked(),
				property.getCascadeStyle(),
		        property.getValue().getFetchMode()
			); 
	} 
 
	/** 
	 * Generate a "standard" (i.e., non-identifier and non-version) based on the given 
	 * mapped property. 
	 * 
	 * @param property The mapped property. 
	 * @param lazyAvailable Is property lazy loading currently available. 
	 * @return The appropriate StandardProperty definition. 
	 */ 
	public static StandardProperty buildStandardProperty(AttributeBinding property, boolean lazyAvailable) {
 
		final Type type = property.getHibernateTypeDescriptor().getResolvedTypeMapping();
 
		// we need to dirty check collections, since they can cause an owner 
		// version number increment 
 
		// we need to dirty check many-to-ones with not-found="ignore" in order 
		// to update the cache (not the database), since in this case a null 
		// entity reference can lose information 
 
		final boolean alwaysDirtyCheck = type.isAssociationType() && ( (AssociationType) type ).isAlwaysDirtyChecked();
 
		if ( property.getAttribute().isSingular() ) {
			final SingularAttributeBinding singularAttributeBinding = ( SingularAttributeBinding ) property;
			final CascadeStyle cascadeStyle = singularAttributeBinding.isAssociation()
					? ( (AssociationAttributeBinding) singularAttributeBinding ).getCascadeStyle()
					: CascadeStyle.NONE;
			final FetchMode fetchMode = singularAttributeBinding.isAssociation()
					? ( (AssociationAttributeBinding) singularAttributeBinding ).getFetchMode()
					: FetchMode.DEFAULT;
 
			return new StandardProperty(
					singularAttributeBinding.getAttribute().getName(),
					null, 
					type,
					lazyAvailable && singularAttributeBinding.isLazy(),
					true, // insertable 
					true, // updatable 
					singularAttributeBinding.getGeneration() == PropertyGeneration.INSERT
							|| singularAttributeBinding.getGeneration() == PropertyGeneration.ALWAYS,
					singularAttributeBinding.getGeneration() == PropertyGeneration.ALWAYS,
					singularAttributeBinding.isNullable(),
					alwaysDirtyCheck || areAllValuesIncludedInUpdate( singularAttributeBinding ),