commit 696666eb5250a1620967fbcfb9f4e4dc9b3d34fb
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Jun 21 23:54:36 2015 +0200

    small improvements

diff --git a/example/main.cpp b/example/main.cpp
index 465ec81..e157e07 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -21,13 +21,15 @@
 using namespace CuteEntityManager;
 int main(int argc, char *argv[]) {
 //    Q_UNUSED(argc) Q_UNUSED(argv)
-    CuteEntityManager::EntityManager *e = new CuteEntityManager::EntityManager("QSQLITE",
-            QDir::currentPath() + "/db.sqlite");
-//    QSharedPointer<Artikel> a = QSharedPointer<Artikel>(new Artikel(20.0, "Müsli"));
-//    auto ep = a.dynamicCast<CuteEntityManager::Entity>();
-//    qDebug() << e;
-//    qDebug() << "Tabelle artikel erstellt:" << e->createTable(ep);
-//    e->create(ep);
+    CuteEntityManager::EntityManager *e = new
+    CuteEntityManager::EntityManager("QSQLITE",
+                                     QDir::currentPath() + "/db.sqlite");
+    QSharedPointer<Artikel> a = QSharedPointer<Artikel>(new Artikel(20.0,
+                                "Müsli"));
+    auto ep = a.dynamicCast<CuteEntityManager::Entity>();
+    qDebug() << e;
+    qDebug() << "Tabelle artikel erstellt:" << e->createTable(ep);
+    e->create(ep);
 
 //    QSharedPointer<CuteEntityManager::Entity> p = QSharedPointer<CuteEntityManager::Entity>(new Person("Max", "Mustermann", Person::MALE, "", "", "",
 //                               QDate::currentDate()));
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index e594f8b..ae9710c 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -544,9 +544,9 @@ bool EntityManager::create(QList<QSharedPointer<Entity> > entities,
 }
 
 bool EntityManager::create(QSharedPointer<Entity> &entity,
-                           const bool persistRelations) {
+                           const bool persistRelations, const bool checkDuplicate) {
     bool rc = false;
-    if (this->checkTable(entity) && this->count(entity) == 0) {
+    if (this->checkTable(entity) && !(checkDuplicate && this->count(entity) == 0)) {
         QSqlQuery q = this->schema.data()->getQueryBuilder().data()->create(entity);
         rc = this->db->transaction(q);
         if (rc) {
diff --git a/src/entitymanager.h b/src/entitymanager.h
index b6ba4e8..d9ef885 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -126,7 +126,8 @@ class EntityManager {
                                bool ignoreID = false);
     bool create(QList<QSharedPointer<Entity>> entities,
                 const bool persistRelations = true);
-    bool create(QSharedPointer<Entity> &entity, const bool persistRelations = true);
+    bool create(QSharedPointer<Entity> &entity, const bool persistRelations = true,
+                const bool checkDuplicate = false);
     bool save(QSharedPointer<Entity> &entity, const bool persistRelations = true);
     qint64 findId(QSharedPointer<Entity> &entity);
     bool merge(QSharedPointer<Entity> &entity, bool withRelations = true);
diff --git a/src/schema.cpp b/src/schema.cpp
index 1a58c0c..c6be0cb 100644
--- a/src/schema.cpp
+++ b/src/schema.cpp
@@ -20,11 +20,12 @@
 #include "database.h"
 using namespace CuteEntityManager;
 
-Schema::Schema(QSharedPointer<Database> database) {
+Schema::Schema(QSharedPointer<Database> database, QSharedPointer<QueryBuilder> builder)
+{
     this->database = database;
     this->abstractTypeMap = QSharedPointer<QHash<QString, QString>>
                             (new QHash<QString, QString>());
-    this->queryBuilder = QSharedPointer<QueryBuilder>();
+    this->queryBuilder = builder;
     this->typeMap = QSharedPointer<QHash<QString, QString>>(new
                     QHash<QString, QString>());
     this->initAbstractDatabaseTypes();
@@ -34,7 +35,7 @@ Schema::~Schema() {
 }
 
 void Schema::initAbstractDatabaseTypes() {
-    this->abstractTypeMap.create();
+    this->abstractTypeMap = QSharedPointer<QHash<QString, QString>>::create();
     this->abstractTypeMap.data()->insert("bool", TYPE_SMALLINT);
     this->abstractTypeMap.data()->insert("short", TYPE_SMALLINT);
     this->abstractTypeMap.data()->insert("int", TYPE_INTEGER);
diff --git a/src/schema.h b/src/schema.h
index 28a49b9..5d380c3 100644
--- a/src/schema.h
+++ b/src/schema.h
@@ -25,7 +25,7 @@ namespace CuteEntityManager {
 class Database;
 class Schema {
   public:
-    Schema(QSharedPointer<Database> database);
+    Schema(QSharedPointer<Database> database, QSharedPointer<QueryBuilder> builder);
     virtual ~Schema();
     //http://doc.qt.io/qt-5/sql-types.html
     const QString TYPE_PK = "pk";
@@ -82,7 +82,7 @@ class Schema {
     virtual void findConstraints(const QSharedPointer<TableSchema> &ts) = 0;
     virtual bool findColumns(const QSharedPointer<TableSchema> &ts) = 0;
     virtual QSharedPointer<TableSchema> loadTableSchema(QString name)  = 0;
-    void initAbstractDatabaseTypes();
+    virtual void initAbstractDatabaseTypes();
     QSharedPointer<Database> database;
     QSharedPointer<QHash<QString, QString>> typeMap;
     QSharedPointer<QHash<QString, QString>> abstractTypeMap;
diff --git a/src/schema/sqliteschema.cpp b/src/schema/sqliteschema.cpp
index 7c9c406..c6f77e5 100644
--- a/src/schema/sqliteschema.cpp
+++ b/src/schema/sqliteschema.cpp
@@ -21,10 +21,10 @@
 using namespace CuteEntityManager;
 
 SqliteSchema::SqliteSchema(QSharedPointer<Database> database) : Schema(
-        database) {
-    this->queryBuilder = QSharedPointer<QueryBuilder>(new SqliteQueryBuilder(
-                             QSharedPointer<Schema>
-                             (this), database));
+        database, QSharedPointer<QueryBuilder>(new SqliteQueryBuilder(
+                    QSharedPointer<Schema>
+                    (this), database))) {
+
 }
 
 SqliteSchema::~SqliteSchema() {
