commit 813205af2fc6abe9184ff8105e6e6a3b5989f0d4
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Fri Apr 17 15:23:30 2015 +0200

    wip, not working

diff --git a/src/entity.cpp b/src/entity.cpp
index 751d958..08c9f1c 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -37,6 +37,10 @@ QHash<QString, Relation> Entity::getRelations() {
     return QHash<QString, Relation>();
 }
 
+QHash<QString, QSharedPointer<Entity> > Entity::getRelationObjects() {
+    return QHash<QString, QSharedPointer<Entity>>();
+}
+
 QStringList Entity::getTransientAttributes() {
     return QStringList();
 }
@@ -48,10 +52,22 @@ QStringList Entity::getBLOBColumns() {
 QString Entity::getPrimaryKey() {
     return "id";
 }
-qint32 Entity::getId() const {
+
+QHash<QString, QMetaProperty> Entity::getMetaProperties() {
+    QHash<QString, QMetaProperty> h = QHash<QString, QMetaProperty>();
+    for (int var = 0; var < this->metaObject()->propertyCount(); ++var) {
+        QMetaProperty m = this->metaObject()->property(var);
+        if (m.name() != QString("objectName")) {
+            h.insert(m.name(), m);
+        }
+    }
+    return h;
+}
+
+qint64 Entity::getId() const {
     return id;
 }
 
-void Entity::setId(const qint32 &value) {
+void Entity::setId(const qint64 &value) {
     id = value;
 }
diff --git a/src/entity.h b/src/entity.h
index f33091f..e0ef665 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -20,6 +20,7 @@
 #include <QMap>
 #include <QDebug>
 #include <QObject>
+#include <QMetaProperty>
 #include "relation.h"
 #include <QStringList>
 namespace CuteEntityManager {
@@ -46,6 +47,14 @@ class Entity : public QObject {
      * @return
      */
     virtual QHash<QString, Relation> getRelations();
+    /**
+     * The hashmap keys must be equal to the ones which are defined in the hashmap of getRelations()
+     * The EntityManager will only introspect Entity Objects, non-Entity inherited relations will be processed in a other way
+     * You must use this method, if you have a n-n Relation with Entity Objects.
+     * @brief getRelationObjects
+     * @return
+     */
+    virtual QHash<QString, QSharedPointer<Entity> > getRelationObjects();
     /**
      * You should return the names of properties which should not persisted e.g. Properties which are only exposed to qml
      * @brief getTransientAttributes
@@ -55,12 +64,13 @@ class Entity : public QObject {
     virtual QStringList getBLOBColumns();
     //return value must be the exact name defined in Q_PROPERTY
     virtual QString getPrimaryKey();
+    QHash<QString, QMetaProperty> getMetaProperties();
 
-    qint32 getId() const;
-    void setId(const qint32 &value);
+    qint64 getId() const;
+    void setId(const qint64 &value);
 
-  protected:
-    qint32 id;
+protected:
+    qint64 id;
 };
 }
 #endif // ENTITY_H
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index 8fe7aad..570c581 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -141,6 +141,7 @@ QHash<QString, QString> QueryBuilder::generateTableDefinition(const QSharedPoint
     auto map = QHash<QString, QString>();
     auto o = entity.data()->metaObject();
     QHash<QString, Relation> relations = entity.data()->getRelations();
+    QHash<QString, QSharedPointer<Entity>> relationObjects = entity.data()->getRelationObjects();
     for (int var = 0; var < o->propertyCount(); ++var) {
         o->property(var);
         auto m = o->property(var);
@@ -151,7 +152,7 @@ QHash<QString, QString> QueryBuilder::generateTableDefinition(const QSharedPoint
             } else if (relations.contains(m.name())) {
                 Relation r = relations.value(m.name());
                 if (r.getType() == RelationType::BELONGS_TO) {
-                    map.insert(QString(m.name()) + "_id", this->schema.data()->TYPE_INTEGER);
+                    map.insert(QString(m.name()) + "_id", this->schema.data()->TYPE_BIGINT);
                 }
             } else if (entity.data()->getBLOBColumns().contains(m.name())) {
                 map.insert(m.name(), this->schema.data()->getTypeMap().data()->value(this->schema.data()->TYPE_BINARY));
@@ -169,13 +170,27 @@ QHash<QString, QString> QueryBuilder::generateTableDefinition(const QSharedPoint
     return map;
 }
 
+QList<QHash<QString, QString>> QueryBuilder::generateRelationTables(const QSharedPointer<Entity> &entity) {
+    QHash<QString, Relation> m = entity.data()->getRelations();
+    for(auto i = m.begin(); i != m.end(); ++i) {
+        Relation r = i.value();
+        if(r.getType() == HAS_MANY) {
+            QHash<QString, QString> h = QHash<QString, QString>();
+            h.insert("id",this->schema.data()->TYPE_BIGPK);
+            //h.insert(entity.data()->metaObject()->className()+ "_id", this->schema.data()->)
+
+        }
+    }
+
+}
+
+
 QString QueryBuilder::transformTypeToAbstractDbType(QString typeName) const {
     QHash<QString, QString> *m = this->schema.data()->getAbstractTypeMap().data();
     if (m->contains(typeName)) {
         return m->value(typeName);
     }
-    QHash<QString, QString>::iterator i;
-    for (i = m->begin(); i != m->end(); ++i) {
+    for (auto i = m->begin(); i != m->end(); ++i) {
         if (i.key().contains(typeName)) {
             return i.value();
         }
