@@ -281,11 +281,11 @@ static CollectionType createCollectionType(String role, String name) {
281281 */
282282 abstract MockCollectionPersister createMockCollectionPersister (String role );
283283
284- abstract boolean isEntityDefined (String entityName );
284+ abstract boolean isEntityDefined (String jpaEntityName );
285285
286286 abstract TypeElement findEntityClass (String entityName );
287287
288- abstract String qualifyName (String entityName );
288+ abstract String qualifyName (String jpaEntityName );
289289
290290 abstract boolean isAttributeDefined (String entityName , String fieldName );
291291
@@ -809,22 +809,16 @@ public MockJpaMetamodelImpl() {
809809 }
810810
811811 @ Override
812- public EntityDomainType <?> entity (String entityName ) {
813- if ( isEntityDefined (entityName ) ) {
814- final TypeElement entityClass = findEntityClass ( entityName );
815- final String entityTypeName = entityClass == null ? entityName : entityClass .getQualifiedName ().toString ();
816- return new MockEntityDomainType <>(entityName , new MockJavaType <>( entityTypeName ));
812+ public @ Nullable EntityDomainType <?> findEntityType (@ Nullable String jpaEntityName ) {
813+ final String entityTypeName = qualifyName (jpaEntityName );
814+ if ( entityTypeName != null ) {
815+ return new MockEntityDomainType <>(new MockJavaType <>(entityTypeName ), jpaEntityName );
817816 }
818817 else {
819818 return null ;
820819 }
821820 }
822821
823- @ Override
824- public @ Nullable EntityDomainType <?> findEntityType (@ Nullable String entityName ) {
825- return entity ( entityName );
826- }
827-
828822 @ Override
829823 public String qualifyImportableName (String queryName ) {
830824 if (isClassDefined (queryName )) {
@@ -838,45 +832,22 @@ else if (isEntityDefined(queryName)) {
838832 }
839833 }
840834
841- @ Override
842- public <X > ManagedDomainType <X > managedType (String typeName ) {
843- final ManagedDomainType <X > managedType = findManagedType ( typeName );
844- if ( managedType == null ) {
845- throw new IllegalArgumentException ("Not a managed type: " + typeName );
846- }
847- return managedType ;
848- }
849-
850835 @ Override
851836 public @ Nullable <X > ManagedDomainType <X > findManagedType (@ Nullable String typeName ) {
852- final String entityName = qualifyName ( typeName );
853- //noinspection unchecked
854- return entityName == null ? null : (ManagedDomainType <X >) findEntityType ( entityName );
837+ // TODO: not every ManagedDomainType is an EntityDomainType!
838+ return typeName == null ? null : new MockEntityDomainType <>(new MockJavaType <>(typeName ));
855839 }
856840
857841 @ Override
858842 public <X > ManagedDomainType <X > findManagedType (Class <X > cls ) {
859- throw new UnsupportedOperationException ( "operation not supported" );
843+ return findManagedType ( cls . getName () );
860844 }
861845
862846 @ Override
863847 public <X > EntityDomainType <X > findEntityType (Class <X > cls ) {
864- if ( isEntityDefined ( cls .getName () ) ) {
865- return new MockEntityDomainType <>( cls .getName (), new MockJavaType <X >( cls .getName () ));
866- }
867- else {
868- return null ;
869- }
870- }
871-
872- @ Override
873- public <X > ManagedDomainType <X > managedType (Class <X > cls ) {
874- throw new UnsupportedOperationException ("operation not supported" );
875- }
876-
877- @ Override
878- public <X > EntityDomainType <X > entity (Class <X > cls ) {
879- throw new UnsupportedOperationException ("operation not supported" );
848+ return !cls .isArray () && !cls .isPrimitive () && isEntityDefined ( cls .getName () )
849+ ? new MockEntityDomainType <>(new MockJavaType <>(cls .getName ()))
850+ : null ;
880851 }
881852
882853 @ Override
@@ -945,8 +916,13 @@ public PersistentAttribute<X,?> findDeclaredAttribute(String name) {
945916
946917 class MockEntityDomainType <X > extends EntityTypeImpl <X > {
947918
948- public MockEntityDomainType (String entityName , JavaType <X > javaType ) {
949- super (entityName , entityName , false , true , false , javaType , null ,
919+ public MockEntityDomainType (JavaType <X > javaType ) {
920+ this (javaType , getJpaEntityName (javaType .getTypeName ()));
921+ }
922+
923+ public MockEntityDomainType (JavaType <X > javaType , String jpaEntityName ) {
924+ super (javaType .getTypeName (), jpaEntityName ,
925+ false , true , false , javaType , null ,
950926 metamodel .getJpaMetamodel ());
951927 }
952928
@@ -1027,10 +1003,14 @@ public SqmPathSource<?> findSubPathSource(String name, boolean includeSubtypes)
10271003 return (SqmPathSource <?>) superattribute ;
10281004 }
10291005 for (Map .Entry <String , MockEntityPersister > entry : entityPersistersByName .entrySet ()) {
1030- if (!entry .getValue ().getEntityName ().equals (getHibernateEntityName ())
1031- && isSubtype (entry .getValue ().getEntityName (), getHibernateEntityName ())) {
1032- final PersistentAttribute <? super Object , ?> subattribute
1033- = new MockEntityDomainType <>(entry .getValue ().getEntityName (), new MockJavaType <>(entry .getValue ().getEntityName ()) ).findAttribute (name );
1006+ final MockEntityPersister entityPersister = entry .getValue ();
1007+ if (!entityPersister .getEntityName ().equals (getHibernateEntityName ())
1008+ && isSubtype (entityPersister .getEntityName (), getHibernateEntityName ())) {
1009+ final MockEntityDomainType <Object > entityDomainType =
1010+ new MockEntityDomainType <>(new MockJavaType <>(entityPersister .getEntityName ()),
1011+ entityPersister .getJpaEntityName ());
1012+ final PersistentAttribute <? super Object , ?> subattribute =
1013+ entityDomainType .findAttribute (name );
10341014 if (subattribute != null ) {
10351015 return (SqmPathSource <?>) subattribute ;
10361016 }
@@ -1063,6 +1043,8 @@ public PersistentAttribute<X,?> findDeclaredAttribute(String name) {
10631043 }
10641044 }
10651045
1046+ protected abstract String getJpaEntityName (String typeName );
1047+
10661048 private AbstractAttribute createAttribute (String name , String entityName , Type type , ManagedDomainType <?> owner ) {
10671049 if (type ==null ) {
10681050 throw new UnsupportedOperationException (entityName + "." + name );
@@ -1076,7 +1058,7 @@ else if ( type.isEntityType() ) {
10761058 owner ,
10771059 name ,
10781060 AttributeClassification .MANY_TO_ONE ,
1079- new MockEntityDomainType <>(type . getName (), new MockJavaType <>(type .getName ())),
1061+ new MockEntityDomainType <>(new MockJavaType <>(type .getName ())),
10801062 null ,
10811063 null ,
10821064 false ,
@@ -1131,12 +1113,17 @@ private DomainType<?> getMapKeyDomainType(String entityName, CollectionType coll
11311113 return getDomainType (entityName , collectionType , owner , keyType );
11321114 }
11331115
1134- private DomainType <?> getDomainType (String entityName , CollectionType collectionType , ManagedDomainType <?> owner , Type elementType ) {
1116+ private DomainType <?> getDomainType (
1117+ String entityName , CollectionType collectionType , ManagedDomainType <?> owner , Type elementType ) {
11351118 if ( elementType .isEntityType () ) {
11361119 final String associatedEntityName = collectionType .getAssociatedEntityName (MockSessionFactory .this );
11371120 final TypeElement associatedEntityEntityClass = findEntityClass ( associatedEntityName );
1138- final String associatedEntityTypeName = associatedEntityEntityClass == null ? associatedEntityName : associatedEntityEntityClass .getQualifiedName ().toString ();
1139- return new MockEntityDomainType <>(associatedEntityName , new MockJavaType <>(associatedEntityTypeName ));
1121+ final String associatedEntityTypeName =
1122+ associatedEntityEntityClass == null
1123+ ? associatedEntityName
1124+ : associatedEntityEntityClass .getQualifiedName ().toString ();
1125+ //TODO: looks wrong
1126+ return new MockEntityDomainType <>(new MockJavaType <>(associatedEntityTypeName ), associatedEntityName );
11401127 }
11411128 else if ( elementType .isComponentType () ) {
11421129 final CompositeType compositeType = (CompositeType ) elementType ;
0 commit comments