diff --git a/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Flight.java b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Flight.java
new file mode 100644
index 0000000000000000000000000000000000000000..d053f4749e55e5f6f0bf9f4dc27a6087b1cee625
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Flight.java
@@ -0,0 +1,44 @@
+package cz.muni.fi.pa165.core.data.domain;
+
+import cz.muni.fi.pa165.core.data.domain.common.DomainEntity;
+import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.OffsetDateTime;
+import java.util.Objects;
+
+@Entity(name = "flights")
+@Data
+@NoArgsConstructor
+public class Flight extends DomainEntity {
+
+    @Column(nullable = false)
+    private OffsetDateTime departureTime;
+
+    @Column(nullable = false)
+    private OffsetDateTime arrivalTime;
+
+    @ManyToOne(fetch = FetchType.LAZY,
+            cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+    private FlightSteward flightSteward;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof Flight flight)) {
+            return false;
+        }
+        return Objects.equals(getId(), flight.getId()) &&
+                Objects.equals(getDepartureTime(), flight.getDepartureTime()) &&
+                Objects.equals(getArrivalTime(), flight.getArrivalTime()) &&
+                Objects.equals(getFlightSteward(), flight.getFlightSteward());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getId(), getDepartureTime(), getArrivalTime(), getFlightSteward());
+    }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/data/domain/FlightSteward.java b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/FlightSteward.java
new file mode 100644
index 0000000000000000000000000000000000000000..455d01b9bd67e759410e12d7f894f2b77c966019
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/FlightSteward.java
@@ -0,0 +1,45 @@
+package cz.muni.fi.pa165.core.data.domain;
+
+import cz.muni.fi.pa165.core.data.domain.common.DomainEntity;
+import jakarta.persistence.Entity;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Objects;
+
+/**
+ * Connection table for flight-steward many-to-many relationship
+ */
+@Entity(name = "flight_steward")
+@Data
+@NoArgsConstructor
+public class FlightSteward extends DomainEntity {
+
+    private Long flightId;
+
+    private Flight flight;
+
+    private Long stewardId;
+
+    private Steward steward;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof FlightSteward flightSteward)) {
+            return false;
+        }
+        return Objects.equals(getId(), flightSteward.getId()) &&
+                Objects.equals(getFlightId(), flightSteward.getFlightId()) &&
+                Objects.equals(getFlight(), flightSteward.getFlight()) &&
+                Objects.equals(getStewardId(), flightSteward.getStewardId()) &&
+                Objects.equals(getSteward(), flightSteward.getSteward());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getId(), getFlightId(), getFlight(), getStewardId(), getSteward());
+    }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Steward.java b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Steward.java
new file mode 100644
index 0000000000000000000000000000000000000000..a67e645f959ee4de981542499d195f54c49519bf
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/data/domain/Steward.java
@@ -0,0 +1,43 @@
+package cz.muni.fi.pa165.core.data.domain;
+
+import cz.muni.fi.pa165.core.data.domain.common.DomainEntity;
+import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Objects;
+
+@Entity(name = "stewards")
+@Data
+@NoArgsConstructor
+public class Steward extends DomainEntity {
+
+    @Column(nullable = false)
+    private String firstName;
+
+    @Column(nullable = false)
+    private String lastName;
+
+    @ManyToOne(fetch = FetchType.LAZY,
+            cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+    private FlightSteward flightSteward;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof Steward steward)) {
+            return false;
+        }
+        return Objects.equals(getId(), steward.getId()) &&
+                Objects.equals(getFirstName(), steward.getFirstName()) &&
+                Objects.equals(getLastName(), steward.getLastName()) &&
+                Objects.equals(getFlightSteward(), steward.getFlightSteward());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getId(), getFirstName(), getLastName(), getFlightSteward());
+    }
+}