diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainObject.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainObject.java
index 8520e8aa4ca12429b526281cce2f466ad735e299..f56b95e001eb1ae13ed4093509cb4ad354c81b4a 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainObject.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainObject.java
@@ -1,5 +1,7 @@
 package org.fuseri.modulelanguageschool.common;
 
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
 import jakarta.persistence.Id;
 import jakarta.persistence.MappedSuperclass;
 import lombok.Getter;
@@ -13,6 +15,6 @@ import java.util.UUID;
 public abstract class DomainObject {
 
     @Id
-    private String id = UUID.randomUUID().toString();
-}
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;}
 
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainService.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainService.java
index 706071fb66c60702f9d1495bbdf2f8e7db533f31..eb30e2e3479e06fdd576a877c832f3e27b2f1959 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainService.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainService.java
@@ -1,5 +1,6 @@
 package org.fuseri.modulelanguageschool.common;
 
+import jakarta.persistence.EntityNotFoundException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
@@ -10,7 +11,7 @@ public abstract class DomainService<T extends DomainObject> {
 
     public static final int DEFAULT_PAGE_SIZE = 10;
 
-    public abstract JpaRepository<T, String> getRepository();
+    public abstract JpaRepository<T, Long> getRepository();
 
     @Transactional
     public T create(T entity) {
@@ -26,4 +27,26 @@ public abstract class DomainService<T extends DomainObject> {
     public Page<T> findAll(int page) {
         return getRepository().findAll(PageRequest.of(page, DEFAULT_PAGE_SIZE));
     }
+
+    /**
+     * Delete an entity with specified id
+     * @param id id of the entity to delete
+     */
+    public void delete(long id) {
+        getRepository().deleteById(id);
+    }
+
+
+    /**
+     * Update an entity
+     *
+     * @param entity the entity to update
+     * @return the updated entity
+     */
+    public T update(T entity) {
+        if (!getRepository().existsById(entity.getId())) {
+            throw new EntityNotFoundException("Entity with id " + entity.getId() + " not found.");
+        }
+        return getRepository().save(entity);
+    }
 }