Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/Admin.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/Admin.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/Admin.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -1,21 +1,17 @@
 package finki.paw5.model;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+
+import java.time.LocalDate;
 
 @Data
 @Entity
 @Table(name = "admin_table")
-public class Admin {
+@PrimaryKeyJoinColumn(name = "id_user")
+public class Admin extends User {
 
-    @Id
-    @Column(name = "id_user", nullable = false)
-    private int id;
-
-    public Admin(int id) {
-        this.id = id;
+    public Admin(LocalDate dateCreated, String name, String email, String password, String telephone) {
+        super(dateCreated, name, email, password, telephone);
     }
 
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/Adopter.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/Adopter.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/Adopter.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -5,18 +5,14 @@
 import finki.paw5.model.enumerations.Housing;
 import finki.paw5.model.enumerations.PhysicalActivity;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+
+import java.time.LocalDate;
 
 @Data
 @Entity
 @Table(name = "adopter")
-public class Adopter {
-
-    @Id
-    @Column(name = "id_user", nullable = false)
-    private int id;
+@PrimaryKeyJoinColumn(name = "id_user")
+public class Adopter extends User {
 
     @Column(name = "free_time")
@@ -47,6 +43,21 @@
     private int verifiedByEmployeeId;
 
-    public Adopter(int id, FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing, PhysicalActivity physicalActivity, boolean willFoster, boolean verified, int verifiedByEmployeeId) {
-        this.id = id;
+    public Adopter(LocalDate dateCreated, String name, String email, String password, String telephone,
+                   FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing,
+                   PhysicalActivity physicalActivity, boolean willFoster, boolean verified, int verifiedByEmployeeId) {
+        super(dateCreated, name, email, password, telephone);
+        this.freeTime = freeTime;
+        this.funds = funds;
+        this.hasOtherPets = hasOtherPets;
+        this.hasKids = hasKids;
+        this.housing = housing;
+        this.physicalActivity = physicalActivity;
+        this.willFoster = willFoster;
+        this.verified = verified;
+        this.verifiedByEmployeeId = verifiedByEmployeeId;
+    }
+
+    public Adopter(FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing,
+                   PhysicalActivity physicalActivity, boolean willFoster, boolean verified, int verifiedByEmployeeId) {
         this.freeTime = freeTime;
         this.funds = funds;
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/Donor.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/Donor.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/Donor.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -1,18 +1,14 @@
 package finki.paw5.model;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+
+import java.time.LocalDate;
 
 @Data
 @Entity
 @Table(name = "donor")
-public class Donor {
-
-    @Id
-    @Column(name = "id_user", nullable = false)
-    private int id;
+@PrimaryKeyJoinColumn(name = "id_user")
+public class Donor extends User {
 
     @Column(name = "is_from_organisation", nullable = false)
@@ -22,6 +18,11 @@
     private String organisationName;
 
-    public Donor(int id, boolean fromOrganisation, String organisationName) {
-        this.id = id;
+    public Donor(LocalDate dateCreated, String name, String email, String password, String telephone, boolean fromOrganisation, String organisationName) {
+        super(dateCreated, name, email, password, telephone);
+        this.fromOrganisation = fromOrganisation;
+        this.organisationName = organisationName;
+    }
+
+    public Donor(boolean fromOrganisation, String organisationName) {
         this.fromOrganisation = fromOrganisation;
         this.organisationName = organisationName;
@@ -30,3 +31,4 @@
     public Donor() {
     }
+
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/Employee.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/Employee.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/Employee.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -1,18 +1,14 @@
 package finki.paw5.model;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+
+import java.time.LocalDate;
 
 @Data
 @Entity
 @Table(name = "employee")
-public class Employee {
-
-    @Id
-    @Column(name = "id_user", nullable = false)
-    private int id;
+@PrimaryKeyJoinColumn(name = "id_user")
+public class Employee extends User {
 
     @Column(name = "position_employee", nullable = false, length = 20)
@@ -28,10 +24,7 @@
     private int verifiedByAdminId;
 
-    public Employee() {
-
-    }
-
-    public Employee(int id, String position, int shelterId, boolean verified, int verifiedByAdminId) {
-        this.id = id;
+    public Employee(LocalDate dateCreated, String name, String email, String password, String telephone,
+                    String position, int shelterId, boolean verified, int verifiedByAdminId) {
+        super(dateCreated, name, email, password, telephone);
         this.position = position;
         this.shelterId = shelterId;
@@ -40,3 +33,14 @@
     }
 
+    public Employee(String position, int shelterId, boolean verified, int verifiedByAdminId) {
+        this.position = position;
+        this.shelterId = shelterId;
+        this.verified = verified;
+        this.verifiedByAdminId = verifiedByAdminId;
+    }
+
+    public Employee() {
+
+    }
+
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/Surendee.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/Surendee.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/Surendee.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -1,24 +1,21 @@
 package finki.paw5.model;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+
+import java.time.LocalDate;
 
 @Data
 @Entity
 @Table(name = "surendee")
-public class Surendee {
+@PrimaryKeyJoinColumn(name = "id_user")
+public class Surendee extends User {
 
-    @Id
-    @Column(name = "id_user", nullable = false)
-    private int id;
-
-    public Surendee(int id) {
-        this.id = id;
+    public Surendee(LocalDate dateCreated, String name, String email, String password, String telephone) {
+        super(dateCreated, name, email, password, telephone);
     }
 
     public Surendee() {
     }
+
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/User.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/User.java	(revision fdfc6fade01d67cb877bcbf08aa15d0b2235e3c0)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/User.java	(revision 579bf6dee959bcd85e613fae39f3e9dd5498d4c0)
@@ -1,8 +1,5 @@
 package finki.paw5.model;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
 
@@ -13,24 +10,25 @@
 @Entity
 @Table(name = "user_table")
+@Inheritance(strategy = InheritanceType.JOINED)
 public class User {
 
     @Id
     @Column(name = "id_user")
-    private int id;
+    protected int id;
 
     @Column(name = "date_created_user", nullable = false)
-    private LocalDate dateCreated;
+    protected LocalDate dateCreated;
 
     @Column(name = "name_user", nullable = false, length = 100)
-    private String name;
+    protected String name;
 
-    @Column(name = "email_user", nullable = false, length = 100, unique=true)
-    private String email;
+    @Column(name = "email_user", nullable = false, length = 100, unique = true)
+    protected String email;
 
     @Column(name = "password_user", nullable = false, length = 20)
-    private String password;
+    protected String password;
 
     @Column(name = "telephone_user", length = 20)
-    private String telephone;
+    protected String telephone;
 
     public User(LocalDate dateCreated, String name, String email, String password, String telephone) {
