commit 37d98e0b1ca290d7264bc2560629fa18ea45a3a6
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Wed Sep 7 21:29:44 2016 +0200

    test

diff --git a/samples/example/models/address.h b/samples/example/models/address.h
index 243d66c..92bb53c 100644
--- a/samples/example/models/address.h
+++ b/samples/example/models/address.h
@@ -10,7 +10,7 @@ class Relation;
 class Pupil;
 class Address: public CuteEntityManager::Entity {
     Q_OBJECT
-
+    EM_MACRO(Address)
     Q_PROPERTY(QString label READ getLabel WRITE setLabel)
     Q_PROPERTY(QString street READ getStreet WRITE setStreet)
     Q_PROPERTY(QString postcode READ getPostcode WRITE setPostcode)
diff --git a/samples/example/models/contact.h b/samples/example/models/contact.h
index 8a89830..19ad5f8 100644
--- a/samples/example/models/contact.h
+++ b/samples/example/models/contact.h
@@ -9,7 +9,7 @@ class Person;
 class Pupil;
 class Contact: public CuteEntityManager::Entity {
     Q_OBJECT
-
+    EM_MACRO(Contact)
     Q_PROPERTY(QString content READ getContent WRITE setContent)
     Q_PROPERTY(Category category READ getCategory WRITE setCategory)
     Q_PROPERTY(QString label READ getLabel WRITE setLabel)
diff --git a/samples/example/models/group.h b/samples/example/models/group.h
index 03c3980..5204c81 100644
--- a/samples/example/models/group.h
+++ b/samples/example/models/group.h
@@ -11,6 +11,7 @@ using namespace CuteEntityManager;
 
 class Group: public CuteEntityManager::Entity {
     Q_OBJECT
+    EM_MACRO(Group)
     Q_PROPERTY(QList<QSharedPointer<Pupil>> pupils READ getPupils WRITE setPupils)
     Q_PROPERTY(QList<QSharedPointer<Person>> persons READ getPersons WRITE
                setPersons)
diff --git a/samples/example/models/person.h b/samples/example/models/person.h
index fb3fde9..56ed902 100644
--- a/samples/example/models/person.h
+++ b/samples/example/models/person.h
@@ -16,6 +16,7 @@ class Address;
 
 class Person: public Entity {
     Q_OBJECT
+    EM_MACRO(Person)
     Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
     Q_PROPERTY(QString familyName READ getFamilyName WRITE setFamilyName)
     Q_PROPERTY(QString namePrefix READ getNamePrefix WRITE setNamePrefix)
diff --git a/samples/simple/article.h b/samples/simple/article.h
index 3df8968..0d2104c 100644
--- a/samples/simple/article.h
+++ b/samples/simple/article.h
@@ -24,6 +24,7 @@
 
 class Article : public CuteEntityManager::Entity {
     Q_OBJECT
+    EM_MACRO(Article)
     Q_PROPERTY(double price READ getPrice WRITE setPrice)
     Q_PROPERTY(QString name READ getName WRITE setName)
   private:
diff --git a/samples/validators/address.h b/samples/validators/address.h
index 0248af9..802f4cf 100644
--- a/samples/validators/address.h
+++ b/samples/validators/address.h
@@ -10,6 +10,7 @@ class Relation;
 class Pupil;
 class Address: public CuteEntityManager::Entity {
     Q_OBJECT
+    EM_MACRO(Address)
     Q_PROPERTY(QString label READ getLabel WRITE setLabel)
     Q_PROPERTY(QString street READ getStreet WRITE setStreet)
     Q_PROPERTY(QString postcode READ getPostcode WRITE setPostcode)
diff --git a/samples/validators/person.h b/samples/validators/person.h
index b8da6f7..c34ae3c 100644
--- a/samples/validators/person.h
+++ b/samples/validators/person.h
@@ -16,6 +16,7 @@ class Address;
 
 class Person: public Entity {
     Q_OBJECT
+    EM_MACRO(Person)
     Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
     Q_PROPERTY(QString familyName READ getFamilyName WRITE setFamilyName)
     Q_PROPERTY(QString namePrefix READ getNamePrefix WRITE setNamePrefix)
diff --git a/src/cache.cpp b/src/cache.cpp
index 2d761cd..791f145 100644
--- a/src/cache.cpp
+++ b/src/cache.cpp
@@ -49,7 +49,7 @@ void Cache::insert(QSharedPointer<Entity> &entity) {
                 return;
             }
         }
-        this->cache.insert(key, entity.toWeakRef());
+        //this->cache.insert(key, entity.toWeakRef());
     }
 }
 
diff --git a/src/databasemigration.h b/src/databasemigration.h
index f819989..5f6409a 100644
--- a/src/databasemigration.h
+++ b/src/databasemigration.h
@@ -21,6 +21,7 @@
 namespace CuteEntityManager {
 class DatabaseMigration : public Entity {
     Q_OBJECT
+    EM_MACRO(DatabaseMigration)
     Q_PROPERTY(QString version READ getVersion WRITE setVersion)
     Q_PROPERTY(QDateTime applyTime READ getApplyTime WRITE setApplyTime)
 
diff --git a/src/entity.h b/src/entity.h
index 56a0a65..f87fc4b 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -44,6 +44,12 @@ class Entity : public QObject {
         QVariant var; \
         var.setValue<QList<QSharedPointer<type>>>(list); \
         property.write(this, var); \
+    } \
+    virtual void setProperty(QSharedPointer<Entity> &entity, const QMetaProperty &property)  override { \
+        QSharedPointer<type> e = *reinterpret_cast<QSharedPointer<type>*>(&entity); \
+        QVariant var; \
+        var.setValue<QSharedPointer<type>>(e); \
+        property.write(this, var); \
     }
 
 //#define EM_PROPERTY(type,attribute,getter,setter)
@@ -88,10 +94,8 @@ class Entity : public QObject {
     QString getErrorsAsString() const;
     void setErrors(const QList<ErrorMsg> &value);
     virtual void setListProperty(QList<QSharedPointer<Entity>> &entList,
-                                 const QMetaProperty &property) {
-        Q_UNUSED(entList);
-        Q_UNUSED(property);
-    }
+                                 const QMetaProperty &property) = 0;
+    virtual void setProperty(QSharedPointer<Entity> &entity, const QMetaProperty &property) = 0;
 
   protected:
     explicit Entity (QObject *parent = 0);
diff --git a/src/entityhelper.cpp b/src/entityhelper.cpp
index e886114..4fc252d 100644
--- a/src/entityhelper.cpp
+++ b/src/entityhelper.cpp
@@ -233,7 +233,7 @@ void EntityHelper::clearEntityListProperty(const QSharedPointer<Entity> &entity,
         entity->setListProperty(list,property);
     }
 }
-
+#include <QDebug>
 void EntityHelper::setProperty(const QSharedPointer<Entity> &entity,
                                QSharedPointer<Entity> value,
                                const QMetaProperty &property) {
@@ -241,10 +241,14 @@ void EntityHelper::setProperty(const QSharedPointer<Entity> &entity,
             > -1) {
         QVariant var;
         var.setValue<QSharedPointer<Entity>>(value);
-        property.write(entity.data(), var);
+        entity->setProperty(value,property);
+        qDebug() << "-----------------------------------------------------";
+        //Q_ASSERT(property.write(entity.data(), var));
+        qDebug() << "-----------------------------------------------------";
     }
 }
 
+
 void EntityHelper::setProperty(const QSharedPointer<Entity> &entity,
                                QSharedPointer<Entity> value, const QString property) {
     auto props = EntityHelper::getMetaProperties(entity.data());
diff --git a/tests/em/tst_em.cpp b/tests/em/tst_em.cpp
index b2cabdb..875bf7a 100644
--- a/tests/em/tst_em.cpp
+++ b/tests/em/tst_em.cpp
@@ -196,6 +196,31 @@ void EmTest::testInheritedRelations() {
     }
 }
 
+void EmTest::testNonCachedInheritedRelations()
+{
+    QSharedPointer<Employee> e1 = QSharedPointer<Employee>(new Employee(42, "Fenja", "S.",
+                                  Person::Gender::FEMALE, "Lotta", QDate(1990, 10, 10), "Psychology"));
+    QSharedPointer<Employee> e2 = QSharedPointer<Employee>(new Employee(11, "Janine",
+                                  "Musterfrau",
+                                  Person::Gender::FEMALE, "", QDate(2000, 1, 1), "Health", true));
+    QSharedPointer<WorkerGroup> wg = QSharedPointer<WorkerGroup>(new
+                                     WorkerGroup("Taskforce P&H", 42));
+    wg->addWorker(e1);
+    wg->addWorker(e2);
+    try {
+        QVERIFY(e->create(wg));
+        QSharedPointer<Group> g = QSharedPointer<Group>(new Group("EmployeeGroup"));
+        g->setPersons({e1, e2});
+        QVERIFY(e->create(g));
+        g->setName("Taskforce 0008");
+        QVERIFY(e->merge(g));
+        QVERIFY(e->remove(g));
+    } catch(QString e) {
+        QFAIL(e.toUtf8().constData());
+    }
+
+}
+
 void EmTest::createRelationTables() {
     QStringList relationTables = QStringList() << "Employee" << "WorkerGroup";
     QVERIFY2(this->e->startup("emTestB", relationTables), "Failure");
diff --git a/tests/em/tst_em.h b/tests/em/tst_em.h
index 53cd490..a93f949 100644
--- a/tests/em/tst_em.h
+++ b/tests/em/tst_em.h
@@ -24,6 +24,7 @@ class EmTest : public QObject {
     void testRelations();
     void testRelationTableCreation();
     void testInheritedRelations();
+    void testNonCachedInheritedRelations();
     void testDatabaseMigrationTable();
     void testTableCreation();
 
diff --git a/tests/models.h b/tests/models.h
index 921f910..f3f7038 100644
--- a/tests/models.h
+++ b/tests/models.h
@@ -22,10 +22,7 @@ class Person: public Entity {
     Q_PROPERTY(QList<QSharedPointer<Group>> groups READ getGroups WRITE setGroups)
     Q_PROPERTY(QList<QSharedPointer<Group>> maintainedGroups READ
                getMaintainedGroups WRITE setMaintainedGroups)
-    EM_MACRO(Group)
-//    EM_LIST_PROPERTY(Group,groups,getGroups,setGroups)
-//    EM_LIST_PROPERTY(Group,maintainedGroups,getMaintainedGroups,setMaintainedGroups)
-
+    EM_MACRO(Person)
 
   public:
     enum class Gender {MALE, FEMALE, UNKNOWNGENDER};
@@ -81,6 +78,7 @@ class Person: public Entity {
 
 class Employee : public Person {
     Q_OBJECT
+    EM_MACRO(Employee)
     Q_PROPERTY(QString department READ getDepartment WRITE setDepartment)
     Q_PROPERTY(quint64 persNumber READ getPersNumber WRITE setPersNumber)
     Q_PROPERTY(bool manager READ isManager WRITE setManager)
@@ -117,12 +115,12 @@ class Employee : public Person {
 
 class WorkerGroup : public Entity {
     Q_OBJECT
+    EM_MACRO(WorkerGroup)
     Q_PROPERTY(QString name READ getName WRITE setName)
     Q_PROPERTY(quint32 efficiency READ getEfficiency WRITE setEfficiency)
     Q_PROPERTY(bool active READ isActive WRITE setActive)
     Q_PROPERTY(QList<QSharedPointer<Employee>> workers READ getWorkers WRITE
                setWorkers)
-    EM_MACRO(Employee)
 
   public:
     WorkerGroup() : Entity() { }
@@ -157,12 +155,12 @@ class WorkerGroup : public Entity {
 
 class Group: public CuteEntityManager::Entity {
     Q_OBJECT
+    EM_MACRO(Group)
     Q_PROPERTY(QList<QSharedPointer<Person>> persons READ getPersons WRITE
                setPersons)
     Q_PROPERTY(QString name READ getName WRITE setName)
     Q_PROPERTY(QSharedPointer<Person> leader READ getLeader WRITE
                setLeader)
-    EM_MACRO(Person)
 
   public:
     Q_INVOKABLE Group();
@@ -187,6 +185,7 @@ class Group: public CuteEntityManager::Entity {
 
 class Article : public CuteEntityManager::Entity {
     Q_OBJECT
+    EM_MACRO(Article)
     Q_PROPERTY(double price READ getPrice WRITE setPrice)
     Q_PROPERTY(QString name READ getName WRITE setName)
   private:
