commit 949b3ea3133d3f0f28cb1f32c2d53a01d3da6891
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Sep 4 14:11:51 2016 +0200

    fixxes

diff --git a/src/cache.cpp b/src/cache.cpp
index 2d761cd..fd11aab 100644
--- a/src/cache.cpp
+++ b/src/cache.cpp
@@ -41,7 +41,7 @@ void Cache::clear() {
 void Cache::insert(QSharedPointer<Entity> &entity) {
     if (entity && entity->getId() > -1) {
         QString key = this->generateKey(entity->getId(),
-                                        EntityHelper::getClassName(entity.data()));
+                                        EntityHelper::getBaseClassName(entity.data(),true));
         if (this->cache.contains(key)) {
             QSharedPointer<Entity> ptr = this->cache.value(key).toStrongRef();
             if (ptr) {
@@ -55,7 +55,7 @@ void Cache::insert(QSharedPointer<Entity> &entity) {
 
 void Cache::remove(const QSharedPointer<Entity> &entity) {
     if (entity.data() && entity->getId() > -1) {
-        this->remove(entity->getId(), EntityHelper::getClassName(entity.data()));
+        this->remove(entity->getId(), EntityHelper::getBaseClassName(entity.data(),true));
     }
 }
 
diff --git a/src/entityhelper.cpp b/src/entityhelper.cpp
index c1a8ffa..e4e247b 100644
--- a/src/entityhelper.cpp
+++ b/src/entityhelper.cpp
@@ -188,6 +188,20 @@ Entity *EntityHelper::getBaseClassObject(const QSharedPointer<Entity> &entity,
     return objectBefore;
 }
 
+const QMetaObject *EntityHelper::getBaseClass(const Entity *entity,
+        bool stopAtSingleTableInheritance) {
+    auto list = EntityHelper::superClasses(entity, stopAtSingleTableInheritance);
+    if(list.isEmpty()) {
+        return entity->metaObject();
+    }
+    return list.last();
+}
+
+const QString EntityHelper::getBaseClassName(const Entity *entity,
+        bool stopAtSingleTableInheritance) {
+    return EntityHelper::getBaseClass(entity, stopAtSingleTableInheritance)->className();
+}
+
 const char *EntityHelper::getClassname(const Entity *entity) {
     return entity->metaObject()->className();
 }
diff --git a/src/entityhelper.h b/src/entityhelper.h
index 562bd39..13fec54 100644
--- a/src/entityhelper.h
+++ b/src/entityhelper.h
@@ -49,6 +49,13 @@ class EntityHelper {
     static Entity* copyObject(const Entity *entity);
     static Entity* getBaseClassObject(const QSharedPointer<Entity> &entity,
                                       QString attributeName);
+    static const QMetaObject * getBaseClass(const Entity *entity,
+                                            bool stopAtSingleTableInheritance
+                                            = false);
+    static const QString getBaseClassName(const Entity *entity,
+                                          bool stopAtSingleTableInheritance
+                                          = false);
+
     static const char *getClassname(const Entity *entity);
     static const QString getClassName(const Entity *entity);
     static void addEntityToListProperty(const QSharedPointer<Entity> &entity,
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 41c21aa..3639da3 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -403,7 +403,8 @@ QSharedPointer<Entity> EntityManager::findById(const qint64 &id,
         QSharedPointer<Entity> &e,
         const bool refresh) {
     QSharedPointer<Entity> r;
-    if (e && (refresh || !(r = this->cache.get(id, EntityHelper::getClassname(e.data()))))) {
+    if (e && (refresh ||
+              !(r = this->cache.get(id, EntityHelper::getBaseClassName(e.data(), true))))) {
         auto map  = this->findByPk(id, e);
         r = this->convert(map, EntityHelper::getClassname(e.data()), refresh);
     }
@@ -426,6 +427,7 @@ void EntityManager::manyToOne(const QSharedPointer<Entity> &entity,
         QString className = attr->getRelatedClass()->className();
         QSharedPointer<Entity> ptr = QSharedPointer<Entity>();
         if (!(this->cache.contains(convertedId, className)
+                /** @todo use Baseclass */
                 && (ptr = this->cache.get(convertedId, className)))) {
             ptr = this->findById(convertedId, className);
         }
@@ -444,7 +446,7 @@ void EntityManager::oneToMany(const QSharedPointer<Entity> &entity,
             QSqlQuery q = this->queryInterpreter->build(query);
             auto listMap = this->convertQueryResult(q);
             auto entities = this->convert(listMap, EntityHelper::getClassname(e.data()));
-            EntityHelper::setListProperty(entity,entities,attr->getMetaProperty());
+            EntityHelper::setListProperty(entity, entities, attr->getMetaProperty());
         }
     }
 }
@@ -801,6 +803,7 @@ void EntityManager::manyToMany(const QSharedPointer<Entity> &entity,
             for (int var = 0; var < listMap.size(); ++var) {
                 auto id = listMap.at(var).value(attr->getRelatedColumnName());
                 if (!(this->cache.contains(id.toLongLong(), secClassName) &&
+                        /** @todo use Baseclass */
                         (e = this->cache.get(id.toLongLong(), secClassName)))) {
                     e = this->findById(id.toLongLong(), secClassName);
                 }
diff --git a/tests/em/tst_em.cpp b/tests/em/tst_em.cpp
index ca2fe29..c6e7751 100644
--- a/tests/em/tst_em.cpp
+++ b/tests/em/tst_em.cpp
@@ -294,11 +294,11 @@ void EmTest::testRelations() {
     p3->setGroups(groups);
     QVERIFY(this->e->save(pEnt, true, true));
     this->e->refresh(g);
-    qDebug() << g->getPersons().size();
-    QVERIFY(g->getPersons().size() == 2);
+    QVERIFY(g->getPersons().size() == 3);
     auto firstPerson = g->getPersons().first();
     g->removePerson(firstPerson);
     QVERIFY(this->e->save(g, true, true));
     this->e->refresh(firstPerson);
-    QVERIFY(firstPerson->getGroups().size() == 0 && g->getPersons().size() == 1);
+    QVERIFY(firstPerson->getGroups().size() == 0);
+    QVERIFY(g->getPersons().size() == 1);
 }
