public static function init()
    {
        $className = get_called_class();
        if (empty(static::$_fieldsDefined[$className])) {
            static::_defineFields();
            static::_initFields();

            static::$_fieldsDefined[$className] = true;
        }
        if (empty(static::$_relationshipsDefined[$className]) && static::isRelational()) {
            static::_defineRelationships();
            static::_initRelationships();

            static::$_relationshipsDefined[$className] = true;
        }

        if (empty(static::$_eventsDefined[$className])) {
            static::_defineEvents();

            static::$_eventsDefined[$className] = true;
        }
    }