commit 3820ae3335697a03f8a8bca236bfebf44101ebec
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sat May 9 01:48:57 2015 +0200

    ...

diff --git a/src/cache.cpp b/src/cache.cpp
index a61f8eb..a2e6d4b 100644
--- a/src/cache.cpp
+++ b/src/cache.cpp
@@ -19,14 +19,14 @@ bool Cache::contains(const QString &key) {
     return false;
 }
 
-void Cache::insert(QSharedPointer<Entity> entity) {
+void Cache::insert(const QSharedPointer<Entity> &entity) {
     if (entity.data() && entity.data()->getId() > -1) {
         this->cache.insert(this->generateKey(entity.data()->getId(), QString(entity.data()->getClassname())),
                            entity.toWeakRef());
     }
 }
 
-void Cache::remove(QSharedPointer<Entity> entity) {
+void Cache::remove(const QSharedPointer<Entity> &entity) {
     if (entity.data() && entity.data()->getId() > -1) {
         this->remove(entity.data()->getId(), QString(entity.data()->getClassname()));
     }
@@ -39,7 +39,11 @@ void Cache::remove(const qint64 &id, const QString &classname) {
 QSharedPointer<Entity> Cache::get(qint64 id, const QString &classname) {
     QString key = this->generateKey(id, classname);
     if (this->contains(key)) {
-        return this->cache.value(key).toStrongRef();
+        QSharedPointer<Entity> ptr = this->cache.value(key).toStrongRef();
+        if (!ptr.data()) {
+            this->remove(id, classname);
+        }
+        return ptr;
     }
     return QSharedPointer<Entity>();
 }
diff --git a/src/cache.h b/src/cache.h
index 047dc95..c5a6fb7 100644
--- a/src/cache.h
+++ b/src/cache.h
@@ -23,8 +23,8 @@ class Cache {
         }
         return ok;
     }
-    void insert(QSharedPointer<Entity> entity);
-    void remove(QSharedPointer<Entity> entity);
+    void insert(const QSharedPointer<Entity> &entity);
+    void remove(const QSharedPointer<Entity> &entity);
     void remove(const qint64 &id, const QString &classname);
     template<class T> void remove(qint64 id) {
         Entity *e = EntityInstanceFactory::createInstance<T>();
diff --git a/src/database.cpp b/src/database.cpp
index 9069c3c..d621a78 100644
--- a/src/database.cpp
+++ b/src/database.cpp
@@ -125,6 +125,33 @@ bool Database::commitTransaction() {
     return true;
 }
 
+DatabaseType Database::getDatabaseType(QString s) {
+    if (s == "qmysql") {
+        return DatabaseType::MYSQL;
+    } else if (s == "qpgsql") {
+        return DatabaseType::PGSQL;
+    } else {
+        return DatabaseType::SQLITE;
+    }
+}
+
+QSharedPointer<Schema> Database::getSchema(int db, QSharedPointer<Database> database) {
+    switch (db) {
+    case SQLITE:
+        return QSharedPointer<Schema>(new SqliteSchema(database));;
+        break;
+//    case PGSQL:
+//        return QSharedPointer<Schema>(new PgSqlSchema());
+//        break;
+//    case MYSQL:
+//        return QSharedPointer<Schema>(new MysqlSchema());
+//        break;
+    default:
+        return QSharedPointer<Schema>(new SqliteSchema(database));
+        break;
+    }
+}
+
 bool Database::exec(const QString &query) {
     QSqlQuery q = QSqlQuery(this->database);
     bool ok = q.exec(query);
diff --git a/src/database.h b/src/database.h
index 626421c..fd89d6c 100644
--- a/src/database.h
+++ b/src/database.h
@@ -60,6 +60,8 @@ class Database {
     QSqlQuery select(const QString &query);
     void startTransaction();
     bool commitTransaction();
+    static DatabaseType getDatabaseType(QString s);
+    static QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database);
 
 };
 }
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 9d81878..b036719 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -22,7 +22,7 @@ using namespace CuteEntityManager;
 QStringList EntityManager::connectionNames = QStringList();
 
 void EntityManager::init() {
-    auto schema = CuteEntityManager::getSchema(CuteEntityManager::getDatabaseType(
+    auto schema = Database::getSchema(Database::getDatabaseType(
                       this->db.data()->getDatabase().driverName()), this->db);
     this->schema = QSharedPointer<Schema>(schema);
     this->schema.data()->setTables(this->schema.data()->getTableSchemas());
@@ -146,8 +146,22 @@ QList<QSharedPointer<Entity> > EntityManager::findEntityByAttributes(const QShar
     return this->convert(maps, entity.data()->getClassname());
 }
 
+/**
+ * @todo should be an insert statement with much values
+ * not really usefull atm
+ * @brief EntityManager::create
+ * @param entities
+ * @return
+ */
 bool EntityManager::create(QList<QSharedPointer<Entity> > entities) {
-
+    bool ok = true;
+    foreach (QSharedPointer<Entity> ent, entities) {
+        ok = this->create(ent);
+        if (!ok) {
+            break;
+        }
+    }
+    return ok;
 }
 
 /**
@@ -163,6 +177,7 @@ bool EntityManager::create(QSharedPointer<Entity> &entity) {
         rc = this->db->transaction(q);
         if (rc) {
             entity.data()->setId(this->schema.data()->getLastInsertID().toLongLong(&rc));
+            this->cache.insert(entity);
         }
     }
     return rc;
diff --git a/src/entitymanager.h b/src/entitymanager.h
index a20b0a6..09dff0c 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -29,6 +29,7 @@
 #include "entity.h"
 #include "database.h"
 #include "entityinstancefactory.h"
+#include "cache.h"
 
 namespace CuteEntityManager {
 
@@ -41,6 +42,7 @@ class EntityManager {
     QSharedPointer<Schema> schema;
     static void setConnectionNames(QStringList list);
     QSharedPointer<Database> db;
+    Cache cache;
     QString createConnection();
     QString createTableQuery(const QSharedPointer<Entity> &entity);
     QList<QHash<QString, QVariant> > convertQueryResult(QSqlQuery &q);
diff --git a/src/enums/databasetype.h b/src/enums/databasetype.h
index 16d5774..a6928d1 100644
--- a/src/enums/databasetype.h
+++ b/src/enums/databasetype.h
@@ -21,40 +21,10 @@
 #include "../schema/sqliteschema.h"
 
 namespace CuteEntityManager {
-class Database;
 enum DatabaseType {
     SQLITE = 0,
     PGSQL = 1,
     MYSQL = 2
 };
-
-static  DatabaseType getDatabaseType(QString s) {
-    if (s == "qmysql") {
-        return DatabaseType::MYSQL;
-    } else if (s == "qpgsql") {
-        return DatabaseType::PGSQL;
-    } else {
-        return DatabaseType::SQLITE;
-    }
-}
-
-static QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database) {
-    switch (db) {
-    case SQLITE:
-        return QSharedPointer<Schema>(new SqliteSchema(database));;
-        break;
-//    case PGSQL:
-//        return QSharedPointer<Schema>(new PgSqlSchema());
-//        break;
-//    case MYSQL:
-//        return QSharedPointer<Schema>(new MysqlSchema());
-//        break;
-    default:
-        return QSharedPointer<Schema>(new SqliteSchema(database));
-        break;
-    }
-}
-
-
 }
 #endif // DATABASETYPE_H
