commit c6e41b5c5dbddc4e194143856f1f7e0cbc8a74e5
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Jan 10 23:10:40 2016 +0100

    wip

diff --git a/src/query.cpp b/src/query.cpp
index 2c9780a..2e3e915 100644
--- a/src/query.cpp
+++ b/src/query.cpp
@@ -214,14 +214,27 @@ Expression Query::like(const QSharedPointer<QueryBuilder> &qb,
     return qb->like(conditions, conjunction, jp, wildcard);
 }
 
-QVariant Query::convertParam(QVariant &val) {
-    if(QString(val.typeName()).contains("QSharedPointer")) {
-        auto entity = EntityInstanceFactory::castQVariant(val);
-        if(entity && entity->getId() != -1) {
-            return entity->getProperty(entity->getPrimaryKey());
+QVariant Query::convertParam(const QVariant val) {
+    auto typeName = QString(val.typeName());
+    QVariant r = val;
+    if(typeName.contains("QSharedPointer")) {
+        if(typeName.contains("QList")) {
+            auto entities = EntityInstanceFactory::castQVariantList(r);
+            QList<QVariant> ids;
+            for (int i = 0; i < entities.size(); ++i) {
+                if(entities.at(i)) {
+                    ids.append(entities.at(i)->getProperty(entities.at(i)->getPrimaryKey()));
+                }
+            }
+            r.setValue<QList<QVariant>>(ids);
+        } else {
+            auto entity = EntityInstanceFactory::castQVariant(r);
+            if(entity && entity->getId() != -1) {
+                r = entity->getProperty(entity->getPrimaryKey());
+            }
         }
     }
-    return val;
+    return r;
 }
 
 QString Query::getSelectOption() const {
@@ -293,12 +306,12 @@ void Query::setJoins(const QList<Join> &value) {
 }
 
 void Query::appendParam(const QString &column, QVariant value) {
-    this->params.insert(column, value);
+    this->params.insert(column, this->convertParam(value));
 }
 
 void Query::appendParams(const QHash<QString, QVariant> &params) {
     for (auto i = params.constBegin(); i != params.constEnd(); ++i) {
-        this->params.insert(i.key(), i.value());
+        this->params.insert(i.key(), this->convertParam(i.value()));
     }
 }
 
diff --git a/src/query.h b/src/query.h
index 7499bfc..cebf009 100644
--- a/src/query.h
+++ b/src/query.h
@@ -166,7 +166,7 @@ class Query {
                     QString conjunction = QStringLiteral("AND"),
                     JokerPosition jp = JokerPosition::BOTH, QChar wildcard = '%');
 protected:
-    QVariant convertParam(QVariant &val);
+    QVariant convertParam(const QVariant val);
 
   private:
     QList<Expression> select;
diff --git a/tests/em/tst_querybuilder.cpp b/tests/em/tst_querybuilder.cpp
index f0bf521..1bb2413 100644
--- a/tests/em/tst_querybuilder.cpp
+++ b/tests/em/tst_querybuilder.cpp
@@ -132,7 +132,9 @@ void QuerybuilderTest::testFindByAttributesManyToOneRelation() {
     QSharedPointer<Person> p = this->e->findEntityByAttributes<Person>(attributes, true);
     QVERIFY(p);
     attributes.clear();
-    attributes["leader"] = QVariant(p);
+    QVariant var;
+    var.setValue<QSharedPointer<Entity>>(p);
+    attributes["leader"] = var;
     QSharedPointer<Group> group = e->findEntityByAttributes<Group>
                                   (attributes, true);
     QVERIFY(group);
@@ -263,7 +265,9 @@ void QuerybuilderTest::testQueryBuilderManyToOneRelation() {
     QCOMPARE(list.size(), 1);
     QCOMPARE(list.at(0)->getNickName(), QString("Lotta"));
     q = Query();
-    q.appendWhere(q.equal(qb, "leader", QVariant(list.at(0))));
+    QVariant var;
+    var.setValue<QSharedPointer<Entity>>(list.at(0));
+    q.appendWhere(q.equal(qb, "leader", QVariant(var)));
     QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false);
     QCOMPARE(groupList.size(), 1);
     QCOMPARE(groupList.at(0)->getName(), QString("Group Health"));
@@ -287,7 +291,9 @@ void QuerybuilderTest::testQueryBuilderManyToManyRelation() {
     QCOMPARE(list.size(), 1);
     QCOMPARE(list.at(0)->getNickName(), QString("Lotta"));
     q = Query();
-    q.appendWhere(q.equal(qb, "persons", QVariant(list.at(0))));
+    QVariant var;
+    var.setValue<QSharedPointer<Entity>>(list.at(0));
+    q.appendWhere(q.equal(qb, "persons", QVariant(var)));
     QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false);
     QCOMPARE(groupList.size(), 1);
     QCOMPARE(groupList.at(0)->getName(), QString("Group Health"));
