diff --git a/pom.xml b/pom.xml
index 4355c4ca761d81aca27d885fc271887b091415c1..f4f2d5abb48e01596b6fb8a8a4c22672d4e33661 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,7 @@
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <hibernate.version>5.6.0.Final</hibernate.version>
     </properties>
 
     <dependencies>
@@ -28,6 +29,11 @@
             <version>1.5.0-b01</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.6.0.Final</version>
+        </dependency>
 
         <dependency>
             <groupId>com.mysql</groupId>
diff --git a/src/main/java/com/gymtracker/handler/LogAuthHandler.java b/src/main/java/com/gymtracker/handler/LogAuthHandler.java
index 6743135c5bc7fe62c60b5f40e6b8a181904b494a..5b7750f923e8308eec3076be3d2564a10de10d82 100644
--- a/src/main/java/com/gymtracker/handler/LogAuthHandler.java
+++ b/src/main/java/com/gymtracker/handler/LogAuthHandler.java
@@ -1,8 +1,11 @@
 package com.gymtracker.handler;
 
+import com.gymtracker.util.HibernateUtil;
 import com.gymtracker.util.Util;
 import com.gymtracker.model.Logging;
 import io.github.cdimascio.dotenv.Dotenv;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPBody;
@@ -10,6 +13,7 @@ import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.handler.MessageContext;
 import javax.xml.ws.handler.soap.SOAPHandler;
 import javax.xml.ws.handler.soap.SOAPMessageContext;
+import java.sql.Timestamp;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -94,8 +98,19 @@ public class LogAuthHandler implements SOAPHandler<SOAPMessageContext> {
                 description.append(" with body: ");
                 description.append(bodyContent);
             }
-            Logging log = new Logging(Util.getIP(smc), Util.getURL(smc), description.toString());
-            log.insert();
+
+            Logging logging = new Logging();
+            logging.setRequestDescription(description.toString());
+            logging.setEndpoint(Util.getURL(smc));
+            logging.setIPAddress(Util.getIP(smc));
+            logging.setTimestamp(new Timestamp(System.currentTimeMillis()));
+
+            SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
+            Session session = sessionFactory.getCurrentSession();
+
+            session.beginTransaction();
+            session.save(logging);
+            session.getTransaction().commit();
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/src/main/java/com/gymtracker/service/Application.java b/src/main/java/com/gymtracker/model/Application.java
similarity index 98%
rename from src/main/java/com/gymtracker/service/Application.java
rename to src/main/java/com/gymtracker/model/Application.java
index 75e05e4b0aceadbeed4fa459007d83df0dd2bf77..95ac3772819a461720ac14c720fded0ae2eeb8df 100644
--- a/src/main/java/com/gymtracker/service/Application.java
+++ b/src/main/java/com/gymtracker/model/Application.java
@@ -1,4 +1,4 @@
-package com.gymtracker.service;
+package com.gymtracker.model;
 
 import com.gymtracker.database.Database;
 
diff --git a/src/main/java/com/gymtracker/model/Logging.java b/src/main/java/com/gymtracker/model/Logging.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d3150044695799ae41d9f84ebf4058c54849cd6
--- /dev/null
+++ b/src/main/java/com/gymtracker/model/Logging.java
@@ -0,0 +1,65 @@
+package com.gymtracker.model;
+
+import javax.persistence.*;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "logging")
+public class Logging {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(nullable = false)
+    private int id;
+
+    @Column(nullable = false)
+    private String ip_address;
+
+    @Column(nullable = false)
+    private Timestamp timestamp;
+
+    @Column(nullable = false)
+    private String endpoint;
+
+    @Lob
+    @Column(nullable = false)
+    private String request_description;
+
+    // Getters
+    public int getID() {
+        return this.id;
+    }
+
+    public String getIPAddress() {
+        return this.ip_address;
+    }
+
+    public Timestamp getTimestamp() {
+        return this.timestamp;
+    }
+
+    public String getEndpoint() {
+        return this.endpoint;
+    }
+
+    public String getRequestDescription() {
+        return this.request_description;
+    }
+
+    // Setters
+    public void setIPAddress(String ip_address) {
+        this.ip_address = ip_address;
+    }
+
+    public void setTimestamp(Timestamp timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public void setEndpoint(String endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    public void setRequestDescription(String request_description) {
+        this.request_description = request_description;
+    }
+}
diff --git a/src/main/java/com/gymtracker/service/Logging.java b/src/main/java/com/gymtracker/service/Logging.java
deleted file mode 100644
index 199652f9bdb697b11b98f22c64e018b8c39dafd5..0000000000000000000000000000000000000000
--- a/src/main/java/com/gymtracker/service/Logging.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.gymtracker.service;
-
-import com.gymtracker.database.Database;
-
-import java.sql.SQLException;
-import java.sql.Timestamp;
-
-public class Logging {
-    private String ip;
-    private Timestamp timestamp;
-    private String endpoint;
-    private String description;
-
-    public Logging(String ip, String endpoint, String description) {
-        this.ip = ip;
-        this.timestamp = new Timestamp(System.currentTimeMillis());
-        this.endpoint = endpoint;
-        this.description = description;
-    }
-
-    public int insert() {
-        try {
-            StringBuilder query = new StringBuilder("INSERT INTO logging ");
-            query.append("(ip_address,timestamp,endpoint,request_description) VALUES(");
-            query.append("'").append(this.ip).append("',");
-            query.append("'").append(this.timestamp).append("',");
-            query.append("'").append(this.endpoint).append("',");
-            query.append("'").append(this.description).append("');");
-
-            return Database.executeUpdate(query.toString());
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
-        return 0;
-    }
-}
diff --git a/src/main/java/com/gymtracker/util/HibernateUtil.java b/src/main/java/com/gymtracker/util/HibernateUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec99434865ac06d62ca0f599cddf98f05390186f
--- /dev/null
+++ b/src/main/java/com/gymtracker/util/HibernateUtil.java
@@ -0,0 +1,45 @@
+package com.gymtracker.util;
+
+import com.gymtracker.model.Logging;
+import io.github.cdimascio.dotenv.Dotenv;
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.service.ServiceRegistry;
+
+import java.util.Properties;
+
+public class HibernateUtil {
+    private static final String name = Dotenv.configure().directory("/").load().get("MYSQL_DATABASE");
+    private static final String port = Dotenv.configure().directory("/").load().get("MYSQL_TCP_PORT");
+    private static final String username = Dotenv.configure().directory("/").load().get("MYSQL_USER");
+    private static final String password = Dotenv.configure().directory("/").load().get("MYSQL_ROOT_PASSWORD");
+
+    private static final String url = String.format("jdbc:mysql://db-java:%s/%s", port, name);
+
+    private static SessionFactory sessionFactory;
+
+    private static SessionFactory buildSessionFactory() {
+        Properties properties = new Properties();
+        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
+        properties.setProperty("hibernate.connection.url", HibernateUtil.url);
+        properties.setProperty("hibernate.connection.username", HibernateUtil.username);
+        properties.setProperty("hibernate.connection.password", HibernateUtil.password);
+        properties.setProperty("hibernate.hbm2ddl.auto", "update");
+        properties.put("hibernate.current_session_context_class", "thread");
+
+        Configuration configuration = new Configuration();
+        configuration.setProperties(properties);
+        configuration.addAnnotatedClass(Logging.class);
+
+        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
+        return configuration.buildSessionFactory(serviceRegistry);
+    }
+
+    public static SessionFactory getSessionFactory() {
+        if (HibernateUtil.sessionFactory == null) {
+            HibernateUtil.sessionFactory = HibernateUtil.buildSessionFactory();
+        }
+        return HibernateUtil.sessionFactory;
+    }
+}