diff --git a/src/Adapter/SQLite.php b/src/Adapter/SQLite.php
index f603d7f..d8f94a8 100644
--- a/src/Adapter/SQLite.php
+++ b/src/Adapter/SQLite.php
@@ -159,6 +159,14 @@ class SQLite implements AdapterInterface, MigrateInterface, SqlAdapterInterface
         $pdo->sqliteCreateFunction('length', fn($string) => strlen($string), 1);
         $pdo->sqliteCreateFunction('lcase', fn($string) => strtolower($string), 1);
         $pdo->sqliteCreateFunction('ucase', fn($string) => strtoupper($string), 1);
+        $pdo->sqliteCreateFunction('md5', fn($string) => md5($string), 1);
+        $pdo->sqliteCreateFunction('sha1', fn($string) => sha1($string), 1);
+        $pdo->sqliteCreateFunction('sha256', fn($string) => hash('sha256', $string), 1);
+        $pdo->sqliteCreateFunction('sha512', fn($string) => hash('sha512', $string), 1);
+        $pdo->sqliteCreateFunction('whirlpool', fn($string) => hash('whirlpool', $string), 1);
+        $pdo->sqliteCreateFunction('murmur3a', fn($string) => hash('murmur3a', $string), 1);
+        $pdo->sqliteCreateFunction('murmur3c', fn($string) => hash('murmur3c', $string), 1);
+        $pdo->sqliteCreateFunction('murmur3f', fn($string) => hash('murmur3f', $string), 1);
         $pdo->sqliteCreateFunction('left', fn($string, $length) => substr($string, 0, $length), 2);
         $pdo->sqliteCreateFunction('right', fn($string, $length) => substr($string, -$length), 2);
         $pdo->sqliteCreateFunction('strcmp', fn($s1, $s2) => strcmp($s1, $s2), 2);
diff --git a/src/Adapter/SqlAdapterTrait.php b/src/Adapter/SqlAdapterTrait.php
index 6f73d8e..a1860de 100644
--- a/src/Adapter/SqlAdapterTrait.php
+++ b/src/Adapter/SqlAdapterTrait.php
@@ -134,7 +134,7 @@ trait SqlAdapterTrait
             case is_object($value):
                 return Ulmus::convertObject($value);
 
-                case is_array($value):
+            case is_array($value):
                 return json_encode($value);
 
             case is_bool($value):
diff --git a/src/Entity/EntityInterface.php b/src/Entity/EntityInterface.php
new file mode 100644
index 0000000..42b9cdb
--- /dev/null
+++ b/src/Entity/EntityInterface.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Ulmus\Entity;
+
+use Ulmus\Common\{ EntityField, EntityResolver };
+use Ulmus\{ ConnectionAdapter, EntityCollection, Query\QueryBuilderInterface, Repository };
+
+interface EntityInterface /* extends \JsonSerializable */
+{
+    public function fromArray(iterable $dataset) : static;
+    public function entityGetDataset(bool $includeRelations = false, bool $returnSource = false) : array;
+    public function toArray($includeRelations = false, array $filterFields = null) : array;
+    public function toCollection() : EntityCollection;
+    public function isLoaded() : bool;
+    public function jsonSerialize() : mixed;
+    public static function resolveEntity() : EntityResolver;
+    public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) : Repository;
+    public static function entityCollection(...$arguments) : EntityCollection;
+    public static function queryBuilder() : QueryBuilderInterface;
+    public static function field($name, null|string|bool $alias = Repository::DEFAULT_ALIAS) : EntityField;
+    public static function fields(array $fields, null|string|bool $alias = Repository::DEFAULT_ALIAS, string $separator = ', ') : string;
+}
\ No newline at end of file
diff --git a/src/EntityCollection.php b/src/EntityCollection.php
index fb412cc..30b1858 100644
--- a/src/EntityCollection.php
+++ b/src/EntityCollection.php
@@ -360,7 +360,7 @@ class EntityCollection extends \ArrayObject implements \JsonSerializable {
 
     public function jsonSerialize(): mixed
     {
-        return $this->toArray();
+        return $this->toArray(true);
     }
 
     public function append($value) : void
diff --git a/src/EntityTrait.php b/src/EntityTrait.php
index fae60c8..0f98799 100644
--- a/src/EntityTrait.php
+++ b/src/EntityTrait.php
@@ -4,9 +4,9 @@ namespace Ulmus;
 
 use Notes\Attribute\Ignore;
 use Psr\Http\Message\ServerRequestInterface;
-use Ulmus\{
-    Common\EntityResolver,
+use Ulmus\{Common\EntityResolver,
     Common\EntityField,
+    Query\QueryBuilderInterface,
     SearchRequest\SearchRequestInterface,
     SearchRequest\SearchRequestPaginationTrait};
 use Ulmus\Annotation\Classes\{ Method, Table, Collation, };
@@ -28,6 +28,10 @@ trait EntityTrait {
 
     #[Ignore]
     public function __construct(array $dataset = null) {
+        if ($dataset) {
+            $this->entityFillFromDataset($dataset);
+        }
+
         $this->resetVirtualProperties();
     }
 
@@ -134,12 +138,12 @@ trait EntityTrait {
     }
 
     #[Ignore]
-    public function fromArray(iterable $dataset) : self
+    public function fromArray(iterable $dataset) : static
     {
         return $this->entityFillFromDataset($dataset);
     }
 
-    public function entityGetDataset(bool $includeRelations = false, bool $returnSource = false) : array
+    public function entityGetDataset(bool $includeRelations = false, bool $returnSource = false, bool $rewriteValue = true) : array
     {
         if ( $returnSource ) {
             return $this->entityLoadedDataset;
@@ -153,7 +157,10 @@ trait EntityTrait {
             $annotation = $entityResolver->searchFieldAnnotation($key, [ Attribute\Property\Field::class, Field::class ]);
 
             if ( isset($this->$key) ) {
-                $dataset[$annotation->name ?? $key] = static::repository()->adapter->adapter()->writableValue($this->$key);
+                $dataset[$annotation->name ?? $key] = $rewriteValue?
+                    static::repository()->adapter->adapter()->writableValue($this->$key)
+                :
+                    $this->$key;
             }
             elseif ( $field['nullable'] ) {
                 $dataset[$annotation->name ?? $key] = null;
@@ -163,7 +170,7 @@ trait EntityTrait {
         # @TODO Must fix recursive bug !
         if ($includeRelations) {
             foreach($entityResolver->properties as $name => $field){
-                $relation =  $entityResolver->searchFieldAnnotation($key, [ Attribute\Property\Relation::class. Relation::class ] );
+                $relation = $entityResolver->searchFieldAnnotation($name, [ Attribute\Property\Relation::class, Relation::class ] );
 
                 if ( $relation && isset($this->$name) && ($relation->entity ?? $relation->bridge) !== static::class ) {
                     if ( null !== $value = $this->$name ?? null ) {
@@ -190,7 +197,7 @@ trait EntityTrait {
     #[Ignore]
     public function toArray($includeRelations = false, array $filterFields = null) : array
     {
-        $dataset = $this->entityGetDataset($includeRelations);
+        $dataset = $this->entityGetDataset($includeRelations, false, false);
 
         return $filterFields ? array_intersect_key($dataset, array_flip($filterFields)) : $dataset;
     }
@@ -269,7 +276,7 @@ trait EntityTrait {
     #[Ignore]
     public function jsonSerialize() : mixed
     {
-        return $this->entityGetDataset();
+        return $this->entityGetDataset(true, false, false);
     }
 
     #[Ignore]
@@ -294,7 +301,7 @@ trait EntityTrait {
     }
 
     #[Ignore]
-    public static function queryBuilder() : QueryBuilder
+    public static function queryBuilder() : QueryBuilderInterface
     {
         return Ulmus::queryBuilder(static::class);
     }