private void assertAccessType(SessionFactoryImplementor factory, Class<?> classUnderTest, AccessType accessType) { EntityTuplizer tuplizer = factory.getEntityPersister( classUnderTest.getName() ) .getEntityMetamodel() .getTuplizer(); if ( AccessType.FIELD.equals( accessType ) ) { Assert.assertTrue( "Field access was expected.", tuplizer.getGetter( 0 ) instanceof GetterFieldImpl ); } else { Assert.assertTrue( "Property access was expected.", tuplizer.getGetter( 0 ) instanceof GetterMethodImpl ); } } }
@Override public Member resolveMember(AttributeContext attributeContext) { final ManagedTypeDescriptor ownerType = attributeContext.getOwnerType(); final Property property = attributeContext.getPropertyMapping(); final Type.PersistenceType persistenceType = ownerType.getPersistenceType(); if ( Type.PersistenceType.EMBEDDABLE == persistenceType ) { return embeddedMemberResolver.resolveMember( attributeContext ); } else if ( Type.PersistenceType.ENTITY == persistenceType || Type.PersistenceType.MAPPED_SUPERCLASS == persistenceType ) { final AbstractIdentifiableType identifiableType = (AbstractIdentifiableType) ownerType; final EntityMetamodel entityMetamodel = getDeclarerEntityMetamodel( identifiableType ); final String propertyName = property.getName(); final Integer index = entityMetamodel.getPropertyIndexOrNull( propertyName ); if ( index == null ) { // just like in #determineIdentifierJavaMember , this *should* indicate we have an IdClass mapping return virtualIdentifierMemberResolver.resolveMember( attributeContext ); } else { final Getter getter = entityMetamodel.getTuplizer().getGetter( index ); return PropertyAccessMapImpl.GetterImpl.class.isInstance( getter ) ? new MapMember( propertyName, property.getType().getReturnedClass() ) : getter.getMember(); } } else { throw new IllegalArgumentException( "Unexpected owner type : " + persistenceType ); } } };
.getGetter( index ) .getMember();