commit 59bf39005367acf23de7e29eac082527a53a95ea
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sat Jun 27 23:39:28 2015 +0200

    bugfix

diff --git a/example/main.cpp b/example/main.cpp
index 8dcf157..8b4423a 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -25,16 +25,17 @@ int main(int argc, char *argv[]) {
     CuteEntityManager::EntityManager *e = new
     CuteEntityManager::EntityManager("QSQLITE",
                                      QDir::currentPath() + "/db.sqlite");
+    QTime t;
+    t.start();
     QThread *entityManager = new QThread();
     e->moveToThread(entityManager);
-
-
     QSharedPointer<Artikel> a = QSharedPointer<Artikel>(new Artikel(20.0,
                                 "Müsli"));
     auto ep = a.dynamicCast<CuteEntityManager::Entity>();
     qDebug() << "Tabelle artikel erstellt:" << e->createTable(ep);
     e->create(ep);
     auto artikel = e->findById<Artikel *>(1);
+    qDebug() << "ArtikelID:" << artikel.data()->getId();
 //    QSharedPointer<CuteEntityManager::Entity> p = QSharedPointer<CuteEntityManager::Entity>(new Person("Max", "Mustermann", Person::MALE, "", "", "",
 //                               QDate::currentDate()));
 //    auto pptr = p.dynamicCast<CuteEntityManager::Entity>();
@@ -42,23 +43,16 @@ int main(int argc, char *argv[]) {
 //    e->create(pptr);
 //e->createTable(grp.dynamicCast<CuteEntityManager::Entity>());
 
-    QTime t;
-    t.start();
 //    e->createTable(QSharedPointer<Artikel>(new Artikel()));
-    for (int var = 0; var < 10000; ++var) {
-        EntityInstanceFactory::createInstance<Artikel*>();
-//        QSharedPointer<Entity> a = QSharedPointer<Artikel>(new Artikel(var,QString("a")+QString::number(var)));
-//        e->save(a);
-    }
-    qDebug() << "Dauer:" << t.elapsed();
+
     //QSharedPointer<Artikel> aPtr = QSharedPointer<Artikel>(entity);
-    Pupil *p = new Pupil();
+    //Pupil *p = new Pupil();
 
 //    auto iterator = hash.constBegin();
 //    while(iterator != hash.constEnd()) {
 //        qDebug() << iterator.key() << " Value:" << iterator.value().read(p);
 //        iterator++;
 //    }
-
+    qDebug() << "Duration:" << t.elapsed();
     return 0;
 }
diff --git a/src/entity.cpp b/src/entity.cpp
index 5ecfa7d..e927fcb 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -169,10 +169,6 @@ QVariant Entity::property(const QString &name) const {
     return this->property(name.toLatin1().constData());
 }
 
-bool Entity::setProperty(const QString &name, const QVariant &value) {
-    return this->setProperty(name.toLatin1().constData(), value);
-}
-
 qint64 Entity::getId() const {
     return id;
 }
diff --git a/src/entity.h b/src/entity.h
index f936416..02dd263 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -64,7 +64,6 @@ class Entity : public QObject {
     const QHash<Relation, QMetaProperty> getRelationProperties() const;
     const char *getClassname() const;
     QVariant property(const QString &name) const;
-    bool setProperty(const QString &name, const QVariant &value);
 
     qint64 getId() const;
     void setId(const qint64 &value);
diff --git a/src/entityinstancefactory.cpp b/src/entityinstancefactory.cpp
index 6731f52..1709b3e 100644
--- a/src/entityinstancefactory.cpp
+++ b/src/entityinstancefactory.cpp
@@ -26,9 +26,8 @@ Entity *EntityInstanceFactory::createInstance(const char *className) {
     if (!s.contains("*")) {
         s.append("*");
     }
-    int type = QMetaType::type(
-                    s.toUtf8().constData());
-    return EntityInstanceFactory::createInstance(type);
+    return EntityInstanceFactory::createInstance(QMetaType::type(
+                s.toUtf8().constData()));
 }
 
 Entity *EntityInstanceFactory::createInstance(const QString &className) {
@@ -104,3 +103,7 @@ Entity *EntityInstanceFactory::newSuperClassInstance(const Entity *e) {
     }
     return super;
 }
+
+Entity *EntityInstanceFactory::createInstance(const QMetaObject *object) {
+    return qobject_cast<Entity *>(object->newInstance());
+}
diff --git a/src/entityinstancefactory.h b/src/entityinstancefactory.h
index 2008ac6..8874a84 100644
--- a/src/entityinstancefactory.h
+++ b/src/entityinstancefactory.h
@@ -35,6 +35,7 @@ class EntityInstanceFactory {
                                  const QHash<QString, QVariant> &attributes);
     static const QString extractEntityType(const QString &s);
     static Entity *newSuperClassInstance(const Entity *e);
+    static Entity *createInstance(const QMetaObject *object);
 
     template<typename T>
     static Entity *createInstance() {
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index dae1ddc..7d00718 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -568,14 +568,14 @@ bool EntityManager::create(QSharedPointer<Entity> &entity,
         bool first = true;
         for (int var = 0; var < q.size(); ++var) {
             auto query = q.at(var);
-            rc = query.exec();
+            rc = this->db.data()->exec(query);
             if (!rc) {
                 qDebug() << "Query failed:" << query.lastError().text();
                 break;
             }
             if (first) {
-                entity.data()->setProperty(entity.data()->getPrimaryKey(),
-                                           query.lastInsertId().toLongLong(&rc));
+                entity.data()->setProperty(
+                    entity.data()->getPrimaryKey().toLatin1().constData(), query.lastInsertId());
                 first = false;
             }
         }
@@ -602,7 +602,7 @@ bool EntityManager::merge(QSharedPointer<Entity> &entity, bool withRelations) {
         bool ok = true;
         for (int var = 0; var < q.size(); ++var) {
             auto query = q.at(var);
-            ok = query.exec();
+            ok = this->db.data()->exec(query);
             if (!ok) {
                 qDebug() << query.lastError().text();
                 break;
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index 20bd840..d0d1225 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -798,14 +798,15 @@ QHash<QString, QMetaProperty> QueryBuilder::processProperties(
     const QSharedPointer<Entity> &e,
     QHash<QString, QMetaProperty> &usedProperties) const {
     auto properties = e.data()->getMetaProperties();
-    auto i = QMutableHashIterator<QString, QMetaProperty>(properties);
+    QMutableHashIterator<QString, QMetaProperty> i(properties);
     while (i.hasNext()) {
+        i.next();
         if (usedProperties.contains(i.key()) && i.key() != e.data()->getPrimaryKey()) {
             properties.remove(i.key());
         } else {
             usedProperties.insert(i.key(), i.value());
         }
-        i.next();
+
     }
     return properties;
 }
@@ -816,12 +817,12 @@ QHash<QString, Relation> QueryBuilder::processRelations(
     auto relations = e.data()->getRelations();
     auto i = QMutableHashIterator<QString, Relation>(relations);
     while (i.hasNext()) {
+        i.next();
         if (usedRelations.contains(i.key())) {
             relations.remove(i.key());
         } else {
             usedRelations.insert(i.key(), i.value());
         }
-        i.next();
     }
     return relations;
 }
@@ -836,10 +837,10 @@ QList<QueryBuilder::ClassAttributes> QueryBuilder::inheritedAttributes(
         auto usedProperties = QHash<QString, QMetaProperty>();
         auto usedRelations = QHash<QString, Relation>();
         QSharedPointer<Entity> e;
-        for (int var = classes.size()-1; var >= 0; --var) {
+        for (int var = classes.size() - 1; var >= 0; --var) {
             auto metaObj = classes.at(var);
             e = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(
-                                           metaObj->className()));
+                                           metaObj));
             if (e) {
                 list.append(QueryBuilder::ClassAttributes(e.data()->getTablename(),
                             this->saveAttributes(entity, this->processProperties(e, usedProperties),
