final protected function _tableDefinition() {
        $annotation = Annotation::getClass($this);

        /** @var \ReflectionClass $fieldClass */
        $fieldClass = new \ReflectionClass('\\Gcs\Framework\Core\\Orm\\Entity\\Field');
        /** @var \ReflectionClass $foreignKeyClass */
        $foreignKeyClass = new \ReflectionClass('\\Gcs\Framework\Core\\Orm\\Entity\\ForeignKey');
        /** @var \ReflectionClass $builderClass */
        $builderClass = new \ReflectionClass('\\Gcs\Framework\Core\\Orm\\Builder');

        foreach ($annotation['class'] as $annotationClass) {
            $instance = $annotationClass[0]['instance'];

            switch ($annotationClass[0]['annotation']) {
                case 'Table':
                    $this->name($instance->name);
                    break;

                case 'Form':
                    $this->form($instance->name);
                    break;
            }
        }

        foreach ($annotation['properties'] as $name => $annotationProperties) {
            foreach ($annotationProperties as $annotationProperty) {
                $instance = $annotationProperty['instance'];

                if ($annotationProperty['annotation'] == 'Column') {
                    $this->field($name)->type($fieldClass->getConstant($instance->type))->size($instance->size)->beNull($instance->null == 'true' ? true : false)->primary($instance->primary == 'true' ? true : false)->unique($instance->unique == 'true' ? true : false)->precision($instance->precision)->defaultValue($instance->default)->enum($instance->enum != '' ? explode(',', $instance->enum) : []);

                    $fieldType = $fieldClass->getConstant($instance->type);

                    if (in_array($fieldType, [Field::DATETIME, Field::DATE, Field::TIMESTAMP])) {
                        $this->set($name, new \DateTime());
                    }
                }
                else {
                    $this->field($name)->foreign(['type' => $foreignKeyClass->getConstant($instance->type), 'reference' => explode('.', $instance->to), 'current' => explode('.', $instance->from), 'belong' => $foreignKeyClass->getConstant($instance->belong), 'join' => $builderClass->getConstant($instance->join),]);

                    $foreignType = $foreignKeyClass->getConstant($instance->type);

                    if (in_array($foreignType, [ForeignKey::MANY_TO_MANY, ForeignKey::ONE_TO_MANY])) {
                        $this->set($name, new Collection());
                    }
                }
            }
        }
    }