commit 74d545d4d7e2b929bf2c4c7b0e5a05f1f874e29a
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Tue Aug 15 19:08:31 2017 +0200

    ...

diff --git a/src/entity.cpp b/src/entity.cpp
index abf813b..2ed3488 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -85,6 +85,10 @@ void Entity::setErrors(const QList<ErrorMsg> &value) {
     this->errors = value;
 }
 
+void Entity::setProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> value, const QMetaProperty &property) {
+    property.write(e.data(), QVariant::fromValue(value));
+}
+
 Entity::~Entity() {
 }
 
diff --git a/src/entity.h b/src/entity.h
index 7d4c363..381c273 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -40,16 +40,7 @@ class Entity : public QObject {
 
 #define EM_MACRO(type) \
     virtual void setListProperty(const QSharedPointer<Entity> &e,QList<QSharedPointer<Entity>> &entList, const QMetaProperty &property)  override { \
-        QList<QSharedPointer<type>> list = *reinterpret_cast<QList<QSharedPointer<type>>*>(&entList); \
-        QVariant var; \
-        var.setValue<QList<QSharedPointer<type>>>(list); \
-        property.write(e.data(), var); \
-    } \
-    virtual void setProperty(const QSharedPointer<Entity> &e,QSharedPointer<Entity> &value, const QMetaProperty &property)  override { \
-        QSharedPointer<type> en = *reinterpret_cast<QSharedPointer<type>*>(&value); \
-        QVariant var; \
-        var.setValue<QSharedPointer<type>>(en); \
-        property.write(e.data(), var); \
+        property.write(e.data(), QVariant::fromValue(list)); \
     }
 
   public:
@@ -88,7 +79,7 @@ class Entity : public QObject {
     void setErrors(const QList<ErrorMsg> &value);
     virtual void setListProperty(const QSharedPointer<Entity> &e, QList<QSharedPointer<Entity>> &entList,
                                  const QMetaProperty &property) = 0;
-    virtual void setProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> &value, const QMetaProperty &property) = 0;
+    virtual void setProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> &value, const QMetaProperty &property);
 
   protected:
     explicit Entity (QObject *parent = 0);
diff --git a/src/entityhelper.cpp b/src/entityhelper.cpp
index f84e5de..2a004f7 100644
--- a/src/entityhelper.cpp
+++ b/src/entityhelper.cpp
@@ -24,7 +24,7 @@ EntityHelper::EntityHelper() {
 }
 
 const QHash<QString, Relation> EntityHelper::getNonInheritedRelations(
-    const Entity *entity) {
+        const Entity *entity) {
     auto relations = entity->getRelations();
     auto superObject = EntityInstanceFactory::newSuperClassInstance(entity);
     if (superObject) {
@@ -41,14 +41,14 @@ const QHash<QString, Relation> EntityHelper::getNonInheritedRelations(
 }
 
 const QList<const QMetaObject *> EntityHelper::superClasses(
-    const Entity *entity, bool
-    stopAtSingleTableInheritance) {
+        const Entity *entity, bool
+        stopAtSingleTableInheritance) {
     QList<const QMetaObject *> classes = QList<const QMetaObject *>();
     auto superMetaObject = entity->metaObject()->superClass();
     if (entity->getInheritanceStrategy() == InheritanceStrategy::JOINED_TABLE) {
         Entity *e = nullptr;
         while (superMetaObject && QString(superMetaObject->className()) !=
-                QString("CuteEntityManager::Entity")) {
+               QString("CuteEntityManager::Entity")) {
             e = EntityInstanceFactory::createInstance(superMetaObject->className());
             if (e) {
                 classes.append(superMetaObject);
@@ -68,12 +68,12 @@ const QList<const QMetaObject *> EntityHelper::superClasses(
 }
 
 const QHash<QString, QMetaProperty> EntityHelper::getMetaProperties(
-    const Entity *entity) {
+        const Entity *entity) {
     return EntityHelper::getMetaProperties(entity->metaObject());
 }
 
 const QHash<QString, QMetaProperty> EntityHelper::getSuperMetaProperties(
-    const Entity *entity) {
+        const Entity *entity) {
     auto superMetaObjectPropertyMap = QHash<QString, QMetaProperty>();
     auto superMeta = entity->metaObject()->superClass();
     if (QString(superMeta->className()) != QString("CuteEntityManager::Entity")
@@ -89,7 +89,7 @@ const QHash<QString, QMetaProperty> EntityHelper::getSuperMetaProperties(
 }
 
 const QHash<QString, QMetaProperty> EntityHelper::getMetaProperties(
-    const QMetaObject *object) {
+        const QMetaObject *object) {
     auto h = QHash<QString, QMetaProperty>();
     for (int var = 0; var < object->propertyCount(); ++var) {
         QMetaProperty m = object->property(var);
@@ -101,13 +101,13 @@ const QHash<QString, QMetaProperty> EntityHelper::getMetaProperties(
 }
 
 const QHash<QString, QMetaProperty> EntityHelper::getNonInheritedMetaProperties(
-    const Entity *entity) {
+        const Entity *entity) {
     auto props = EntityHelper::getMetaProperties(entity);
     auto superObject = EntityInstanceFactory::newSuperClassInstance(entity);
     if (superObject) {
         auto superProps = EntityHelper::getMetaProperties(superObject);
         for (auto iterator = superProps.constBegin(); iterator != superProps.constEnd();
-                ++iterator) {
+             ++iterator) {
             if (props.contains(iterator.key())) {
                 props.remove(iterator.key());
             }
@@ -119,7 +119,7 @@ const QHash<QString, QMetaProperty> EntityHelper::getNonInheritedMetaProperties(
 }
 
 const QHash<QString, QMetaProperty> EntityHelper::getInheritedMetaProperties(
-    const Entity *entity) {
+        const Entity *entity) {
     auto props = EntityHelper::getMetaProperties(entity);
     auto superObject = EntityInstanceFactory::newSuperClassInstance(entity);
     auto wholeProperties = QHash<QString, QMetaProperty>();
@@ -138,7 +138,7 @@ const QHash<QString, QMetaProperty> EntityHelper::getInheritedMetaProperties(
 }
 
 const QHash<Relation, QMetaProperty> EntityHelper::getRelationProperties(
-    const Entity *entity) {
+        const Entity *entity) {
     auto h = QHash<Relation, QMetaProperty>();
     if(entity) {
         auto relations = entity->getRelations();
@@ -167,7 +167,7 @@ Entity* EntityHelper::copyObject(const Entity *entity) {
 }
 
 Entity *EntityHelper::getBaseClassObject(const QSharedPointer<Entity> &entity,
-        QString attributeName) {
+                                         QString attributeName) {
     auto superObject = EntityInstanceFactory::createInstance(entity->metaObject());
     auto objectBefore = superObject;
     bool first = true;
@@ -197,11 +197,11 @@ const QString EntityHelper::getClassName(const Entity *entity) {
 }
 
 void EntityHelper::addEntityToListProperty(const QSharedPointer<Entity>
-        &entity, QSharedPointer<Entity> add, const QMetaProperty &property) {
+                                           &entity, QSharedPointer<Entity> add, const QMetaProperty &property) {
     QVariant var = property.read(entity.data());
     QList<QSharedPointer<Entity>> list = (!var.isNull() && var.data() &&
                                           var.canConvert<QList<QVariant>>() ? EntityInstanceFactory::castQVariantList(
-                                                  var) : QList<QSharedPointer<Entity>>());
+                                                                                  var) : QList<QSharedPointer<Entity>>());
     if (!list.contains(add)) {
         list.append(add);
         EntityHelper::setListProperty(entity, list, property);
@@ -209,7 +209,7 @@ void EntityHelper::addEntityToListProperty(const QSharedPointer<Entity>
 }
 
 void EntityHelper::removeEntityFromListProperty(const QSharedPointer<Entity>
-        &entity, QSharedPointer<Entity> remove, const QMetaProperty &property) {
+                                                &entity, QSharedPointer<Entity> remove, const QMetaProperty &property) {
     QVariant var = property.read(entity.data());
     if (!var.isNull() && var.canConvert<QList<QVariant>>()) {
         auto list = EntityInstanceFactory::castQVariantList(var);
@@ -225,7 +225,7 @@ void EntityHelper::removeEntityFromListProperty(const QSharedPointer<Entity>
 }
 
 void EntityHelper::clearEntityListProperty(const QSharedPointer<Entity> &entity,
-        const QMetaProperty &property) {
+                                           const QMetaProperty &property) {
     QVariant var = property.read(entity.data());
     if (var.canConvert<QList<QVariant>>()) {
         auto list = EntityInstanceFactory::castQVariantList(var);
@@ -241,8 +241,8 @@ void EntityHelper::setProperty(const QSharedPointer<Entity> &entity,
             > -1) {
         auto i = EntityInstanceFactory::createInstance(EntityInstanceFactory::extractEntityType(property.typeName()));
         if(i) {
-        i->setProperty(entity, value, property);
-        delete i;
+            i->setProperty(entity, value, property);
+            delete i;
         }
     }
 }
@@ -251,14 +251,14 @@ void EntityHelper::setListProperty(const QSharedPointer<Entity> &entity,
                                    QList<QSharedPointer<Entity>> &value, const QMetaProperty &property) {
     auto i = EntityInstanceFactory::createInstance(EntityInstanceFactory::extractEntityType(property.typeName()));
     if(i) {
-    i->setListProperty(entity, value, property);
-    delete i;
+        i->setListProperty(entity, value, property);
+        delete i;
     }
 }
 
 
 QMetaProperty EntityHelper::mappedProperty(const Relation &r,
-        const QSharedPointer<Entity> &foreignEntity) {
+                                           const QSharedPointer<Entity> &foreignEntity) {
     QMetaProperty prop;
     auto props = EntityHelper::getMetaProperties(foreignEntity.data());
     if (!r.getMappedBy().isEmpty() && props.contains(r.getMappedBy())) {
@@ -266,7 +266,7 @@ QMetaProperty EntityHelper::mappedProperty(const Relation &r,
     } else {
         auto relations = foreignEntity->getRelations();
         for (auto iterator = relations.constBegin(); iterator != relations.constEnd();
-                ++iterator) {
+             ++iterator) {
             auto rel = iterator.value();
             if (rel.getMappedBy() == r.getPropertyName()) {
                 prop = props.value(rel.getPropertyName());
@@ -278,9 +278,9 @@ QMetaProperty EntityHelper::mappedProperty(const Relation &r,
 }
 
 QHash<QString, QVariant> EntityHelper::getEntityAttributes(
-    const QHash<QString, QMetaProperty>
-    &props,
-    const QSharedPointer<Entity> &entity) {
+        const QHash<QString, QMetaProperty>
+        &props,
+        const QSharedPointer<Entity> &entity) {
     auto map = QHash<QString, QVariant>();
     auto transientAttrs = entity->getTransientAttributes();
     auto relations = entity->getRelations();
@@ -297,3 +297,18 @@ QHash<QString, QVariant> EntityHelper::getEntityAttributes(
     }
     return map;
 }
+
+const QList<qint64> EntityHelper::getIds(QList<QSharedPointer<Entity> > entities) {
+    QList<qint64> l = QList<qint64>();
+    for(int i=0; i<entities.size(); ++i) {
+        auto e = entities.at(i);
+        l.append(e->getId());
+    }
+    return l;
+}
+
+const QVariant EntityHelper::getIdsAsVariant(QList<QSharedPointer<Entity> > entities) {
+    QVariant var;
+    var.setValue<QList<qint64>>(EntityHelper::getIds(entities));
+    return var;
+}
diff --git a/src/entityhelper.h b/src/entityhelper.h
index a518ef1..29863ad 100644
--- a/src/entityhelper.h
+++ b/src/entityhelper.h
@@ -27,25 +27,25 @@ class Relation;
 class Entity;
 class Cache;
 class EntityHelper {
-  public:
+public:
     EntityHelper();
     static const QHash<QString, Relation> getNonInheritedRelations(
-        const Entity *entity);
+            const Entity *entity);
     static const QList<const QMetaObject *> superClasses(const Entity *entity,
-            bool stopAtSingleTableInheritance
-            = false);
+                                                         bool stopAtSingleTableInheritance
+                                                         = false);
     static const QHash<QString, QMetaProperty> getMetaProperties(
-        const Entity *entity);
+            const Entity *entity);
     static const QHash<QString, QMetaProperty> getSuperMetaProperties(
-        const Entity *entity);
+            const Entity *entity);
     static const QHash<QString, QMetaProperty> getMetaProperties(
-        const QMetaObject *object);
+            const QMetaObject *object);
     static const QHash<QString, QMetaProperty> getNonInheritedMetaProperties(
-        const Entity *entity);
+            const Entity *entity);
     static const QHash<QString, QMetaProperty> getInheritedMetaProperties(
-        const Entity *entity);
+            const Entity *entity);
     static const QHash<Relation, QMetaProperty> getRelationProperties(
-        const Entity *entity);
+            const Entity *entity);
     static Entity* copyObject(const Entity *entity);
     static Entity* getBaseClassObject(const QSharedPointer<Entity> &entity,
                                       QString attributeName);
@@ -54,20 +54,22 @@ class EntityHelper {
     static void addEntityToListProperty(const QSharedPointer<Entity> &entity,
                                         QSharedPointer<Entity> add, const QMetaProperty &property);
     static void removeEntityFromListProperty(const QSharedPointer<Entity> &entity,
-            QSharedPointer<Entity> remove, const QMetaProperty &property);
+                                             QSharedPointer<Entity> remove, const QMetaProperty &property);
     static void clearEntityListProperty(const QSharedPointer<Entity> &entity,
                                         const QMetaProperty &property);
     static void setProperty(const QSharedPointer<Entity> &entity,
                             QSharedPointer<Entity> value,
                             const QMetaProperty &property);
     static void setListProperty(const QSharedPointer<Entity> &entity,
-                            QList<QSharedPointer<Entity>> &value,
-                            const QMetaProperty &property);
+                                QList<QSharedPointer<Entity>> &value,
+                                const QMetaProperty &property);
     static QMetaProperty mappedProperty(const Relation &r,
                                         const QSharedPointer<Entity> &foreignEntity);
     static QHash<QString, QVariant> getEntityAttributes(const
-            QHash<QString, QMetaProperty> &props,
-            const QSharedPointer<Entity> &entity);
+                                                        QHash<QString, QMetaProperty> &props,
+                                                        const QSharedPointer<Entity> &entity);
+    static const QList<qint64> getIds(QList<QSharedPointer<Entity>> entities);
+    static const QVariant getIdsAsVariant(QList<QSharedPointer<Entity>> entities);
 };
 }
 
diff --git a/src/entityinspector.cpp b/src/entityinspector.cpp
index 9efd3bd..4022b3c 100644
--- a/src/entityinspector.cpp
+++ b/src/entityinspector.cpp
@@ -31,6 +31,7 @@ EntityInspector::~EntityInspector() {
 
 bool EntityInspector::checkRegisteredEntities() {
     QStringList classes = EntityInstanceFactory::getRegisteredClasses();
+    classes.sort();
     QString msg = QDateTime::currentDateTime().toString(Qt::ISODate) +
                   " - Start checking entities\n";
     this->logger->logMsg(msg, MsgType::INFO);
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 4773cf7..09f927a 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -477,7 +477,7 @@ void EntityManager::savePrePersistedRelations(const QSharedPointer<Entity>
     auto iterator = relations.constBegin();
     while (iterator != relations.constEnd()) {
         const Relation r = iterator.key();
-        auto var = iterator.value().read(entity.data());
+        QVariant var = iterator.value().read(entity.data());
         if(!var.isNull() && var.data()) {
             if (r.getType() == RelationType::MANY_TO_ONE) {
                 auto e = EntityInstanceFactory::castQVariant(var);
@@ -507,7 +507,7 @@ void EntityManager::savePostPersistedRelations(const QSharedPointer<Entity>
     auto relations = EntityHelper::getRelationProperties(entity.data());
     for (auto i = relations.constBegin(); i != relations.constEnd(); ++i) {
         const Relation r = i.key();
-        auto var = i.value().read(entity.data());
+        QVariant var = i.value().read(entity.data());
         if (r.getType() == RelationType::MANY_TO_MANY) {
             this->persistManyToMany(entity, r, var, mergedObjects, ignoreHasChanged,
                                     newItem);
@@ -516,7 +516,7 @@ void EntityManager::savePostPersistedRelations(const QSharedPointer<Entity>
                         var);
             if (!list.isEmpty()) {
                 auto fkProp = EntityHelper::mappedProperty(r, list.at(0));
-                for (int var = 0; var < list.size(); ++var) {
+                for (int x = 0; x < list.size(); ++x) {
                     auto e = list.at(var);
                     if (e && this->shouldBeSaved(e, r)) {
                         EntityHelper::setProperty(e, entity, fkProp);
diff --git a/src/entitymanager.h b/src/entitymanager.h
index e55ee71..c10b4ee 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -23,7 +23,6 @@
 #include <QStringList>
 #include <QObject>
 #include <QSharedPointer>
-#include <QDebug>
 #include <QtSql/QSqlError>
 #include <QMetaType>
 #include "schema.h"
@@ -37,6 +36,7 @@
 #include "attribute.h"
 namespace CuteEntityManager {
 #ifdef QT_DEBUG
+#include <QDebug>
 #define DEFAULTMSGTYPE MsgType::DEBUG
 #define INSPECTENTITIES true
 #else
diff --git a/tests/em/tst_em.cpp b/tests/em/tst_em.cpp
index 2d412b4..9475586 100644
--- a/tests/em/tst_em.cpp
+++ b/tests/em/tst_em.cpp
@@ -350,7 +350,6 @@ 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);
     auto firstPerson = g->getPersons().first();
     g->removePerson(firstPerson);
