commit fa408e042c3e347cea466ab3488e63f81ec3300d
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Fri May 6 00:59:50 2016 +0200

    tried something

diff --git a/src/entityhelper.cpp b/src/entityhelper.cpp
index 6b3e438..a6063d7 100644
--- a/src/entityhelper.cpp
+++ b/src/entityhelper.cpp
@@ -18,6 +18,7 @@
 #include "entity.h"
 #include "relation.h"
 #include "cache.h"
+#include <QDebug>
 
 using namespace CuteEntityManager;
 EntityHelper::EntityHelper() {
@@ -199,9 +200,57 @@ const QString EntityHelper::getClassName(const Entity *entity) {
 void EntityHelper::setListProperty(const QSharedPointer<Entity> &entity,
                                    QList<QSharedPointer<Entity>> &list,
                                    const QMetaProperty &property)  {
-    QVariant var;
-    var.setValue<QList<QSharedPointer<Entity>>>(list);
-    property.write(entity.data(), var);
+//    if ( constructor == nullptr ) {
+//        return nullptr;
+//    }
+//    return (*constructor)();
+
+    if(!list.isEmpty()) {
+        auto ab = property.read(entity.data());
+        auto i = EntityInstanceFactory::getInstance();
+        auto constructor = i.value(EntityInstanceFactory::extractEntityType(QString(ab.typeName())).toUtf8());
+        if(constructor) {
+        auto obj = (*constructor)();
+        auto var = qVariantFromValue(list);
+        EntityHelper::writeListProperty(entity,var,property,obj);
+        }
+    }
+
+
+
+//    QVariant var = qVariantFromValue(list);
+//    auto data = var.data();
+
+    //auto tes = ab.data_ptr().type;
+//    auto bl = QMetaType::typeName(tes);
+//    auto b = QMetaType::metaObjectForType(tes);
+    //auto ab12 = QVariant::
+    //auto typeName = ab.typeName();
+
+
+    //auto t = QVariant::nameToType(var.typeName());
+    //auto data = entity.data();
+    //EntityHelper::writeProperty(entity,var,ab,property);
+    //var.setValue<QList<QSharedPointer<Entity>>>(list);
+    //auto ok = property.write(data,var);
+//    qDebug() << property.typeName();
+//
+
+
+//    qDebug() << var.convert(property.type());
+//    auto var123 = property.read(data);
+//    auto li = var123.toList();
+//    for (int i = 0; i < list.size(); ++i) {
+//        QVariant v;
+//        v.setValue<QSharedPointer<Entity>>(list.at(i));
+//        li.append(v);
+//    }
+////qDebug() << qMetaTypeId(EntityInstanceFactory::extractEntityType(property.typeName()));
+
+//    qDebug() << property.write(data,var123) << "1";
+//    qDebug() << property.write(data,li)<< "2";
+//    qDebug() << property.write(data, QVariant::fromValue(list))<< "3";
+//    qDebug() << var<< "4";
 }
 
 void EntityHelper::addEntityToListProperty(const QSharedPointer<Entity>
diff --git a/src/entityhelper.h b/src/entityhelper.h
index 562bd39..6d56e2f 100644
--- a/src/entityhelper.h
+++ b/src/entityhelper.h
@@ -60,6 +60,21 @@ class EntityHelper {
     static void setListProperty(const QSharedPointer<Entity> &entity,
                                 QList<QSharedPointer<Entity>> &list,
                                 const QMetaProperty &property);
+    template<class T>
+    static void writeListProperty(const QSharedPointer<Entity> &entity, QVariant data, const QMetaProperty &property,T object) {
+        Q_UNUSED(object)
+        QVariant variant;
+        T *t = new T();
+
+        QList<QSharedPointer<T>> li;
+        //variant = qVariantFromValue(li);
+
+        //auto list = *reinterpret_cast<QList<QSharedPointer<T>>*>(data.data());
+
+        //variant.setValue<QList<QSharedPointer<T>>>(list);
+//        property.write(entity.data(),variant);
+    }
+
     static void setProperty(const QSharedPointer<Entity> &entity,
                             QSharedPointer<Entity> value,
                             const QMetaProperty &property);
diff --git a/src/entityinstancefactory.cpp b/src/entityinstancefactory.cpp
index 1a77cb4..c7c6f46 100644
--- a/src/entityinstancefactory.cpp
+++ b/src/entityinstancefactory.cpp
@@ -160,3 +160,8 @@ Entity *EntityInstanceFactory::createInstance(Attribute *&attr) {
                EntityInstanceFactory::extractEntityType(
                    attr->getMetaProperty().typeName()));
 }
+
+typedef Entity *(*Constructor)();
+QHash<QByteArray, Constructor> EntityInstanceFactory::getInstance() {
+    return instance;
+}
diff --git a/src/entityinstancefactory.h b/src/entityinstancefactory.h
index bf626fc..d09b9d7 100644
--- a/src/entityinstancefactory.h
+++ b/src/entityinstancefactory.h
@@ -23,6 +23,7 @@ namespace CuteEntityManager {
 class Entity;
 class EntityInstanceFactory {
   public:
+    typedef Entity *(*Constructor)();
     static Entity *createInstance(const char *className);
     static Entity *createInstance(const QString &className);
     static Entity *createInstance(int metaTypeId);
@@ -46,7 +47,6 @@ class EntityInstanceFactory {
     }
     static Entity *createInstance(Attribute *&attr);
 
-
     //http://www.mimec.org/node/350
     template<typename T>
     static void registerClass() {
@@ -69,8 +69,9 @@ class EntityInstanceFactory {
         return (*constructor)();
     }
 
-  private:
-    typedef Entity *(*Constructor)();
+    static QHash<QByteArray, Constructor> getInstance();
+
+private:
     template<typename T>
     static Entity *constructorHelper() {
         return new T();
diff --git a/src/logger.cpp b/src/logger.cpp
index 15b72b4..45821af 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -19,6 +19,7 @@
 #include <QTextStream>
 #include <QDateTime>
 #include <QtGlobal>
+#include <QSqlDriver>
 
 using namespace CuteEntityManager;
 
