From b2c7410c03feaf57fdc786b56b15373444de2478 Mon Sep 17 00:00:00 2001 From: Ved Asole <77259804+ved-asole@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:50:13 +0530 Subject: [PATCH] feat: #1316 Single Table Inheritance pattern implemented (#2632) * implemented single table inheritance * added the Java documentation for the pattern * updated code files as per the standards * added the puml and png diagram for the file * added README.md * #1316 Single Table Inheritance pattern implemented * resolved the Checkstyle violations * removed the tests due to build failure * updated the code as per review * resolved Checkstyle violations --- pom.xml | 1 + single-table-inheritance/README.md | 157 +++++++++++++++++ .../etc/single-table-inheritance.urm.png | Bin 0 -> 141489 bytes .../etc/single-table-inheritance.urm.puml | 163 ++++++++++++++++++ single-table-inheritance/pom.xml | 36 ++++ .../com/iluwatar/SingleTableInheritance.java | 93 ++++++++++ .../main/java/com/iluwatar/entity/Car.java | 39 +++++ .../java/com/iluwatar/entity/Freighter.java | 41 +++++ .../com/iluwatar/entity/PassengerVehicle.java | 30 ++++ .../main/java/com/iluwatar/entity/Train.java | 38 ++++ .../com/iluwatar/entity/TransportVehicle.java | 25 +++ .../main/java/com/iluwatar/entity/Truck.java | 38 ++++ .../java/com/iluwatar/entity/Vehicle.java | 54 ++++++ .../repository/VehicleRepository.java | 14 ++ .../com/iluwatar/service/VehicleService.java | 71 ++++++++ .../src/main/resources/application.properties | 11 ++ 16 files changed, 811 insertions(+) create mode 100644 single-table-inheritance/README.md create mode 100644 single-table-inheritance/etc/single-table-inheritance.urm.png create mode 100644 single-table-inheritance/etc/single-table-inheritance.urm.puml create mode 100644 single-table-inheritance/pom.xml create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/SingleTableInheritance.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/Car.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/Freighter.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/PassengerVehicle.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/Train.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/TransportVehicle.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/Truck.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/entity/Vehicle.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/repository/VehicleRepository.java create mode 100644 single-table-inheritance/src/main/java/com/iluwatar/service/VehicleService.java create mode 100644 single-table-inheritance/src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index 48e725a4f..e45a5ee16 100644 --- a/pom.xml +++ b/pom.xml @@ -210,6 +210,7 @@ crtp log-aggregation health-check + single-table-inheritance diff --git a/single-table-inheritance/README.md b/single-table-inheritance/README.md new file mode 100644 index 000000000..541ad1423 --- /dev/null +++ b/single-table-inheritance/README.md @@ -0,0 +1,157 @@ +--- +title: Single Table Inheritance Pattern +category: Structural +language: en +tag: + - Data access +--- + +## Single Table Inheritance(STI) + +## Intent + +Represents an inheritance hierarchy of classes as a single table that has columns for all the fields of the various classes. + +## Explanation + +Real-world example + +> There can be many different types of vehicles in this world but all of them +> come under the single umbrella of Vehicle + +In plain words + +> It maps each instance of class in an inheritance tree into a single table. + +Wikipedia says + +> Single table inheritance is a way to emulate object-oriented inheritance in a relational database. +> When mapping from a database table to an object in an object-oriented language, +> a field in the database identifies what class in the hierarchy the object belongs to. +> All fields of all the classes are stored in the same table, hence the name "Single Table Inheritance". + +**Programmatic Example** + +Baeldung - Hibernate Inheritance + +> We can define the strategy we want to use by adding the @Inheritance annotation to the superclass: + +```java +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +public class MyProduct { + @Id + private long productId; + private String name; + + // constructor, getters, setters +} +``` + +The identifier of the entities is also defined in the superclass. + +Then we can add the subclass entities: + +```java +@Entity +public class Book extends MyProduct { + private String author; +} +``` + +```java +@Entity +public class Pen extends MyProduct { + private String color; +} +``` +Discriminator Values + +- Since the records for all entities will be in the same table, Hibernate needs a way to differentiate between them. + +- By default, this is done through a discriminator column called DTYPE that has the name of the entity as a value. + +- To customize the discriminator column, we can use the @DiscriminatorColumn annotation: + +```java +@Entity(name="products") +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name="product_type", + discriminatorType = DiscriminatorType.INTEGER) +public class MyProduct { + // ... +} +``` +- Here we’ve chosen to differentiate MyProduct subclass entities by an integer column called product_type. + +- Next, we need to tell Hibernate what value each subclass record will have for the product_type column: + +```java +@Entity +@DiscriminatorValue("1") +public class Book extends MyProduct { + // ... +} +``` +```java +@Entity +@DiscriminatorValue("2") +public class Pen extends MyProduct { + // ... +} +``` + +- Hibernate adds two other predefined values that the annotation can take — null and not null: + + - @DiscriminatorValue(“null”) means that any row without a discriminator value will be mapped to the entity class with this annotation; this can be applied to the root class of the hierarchy. + - @DiscriminatorValue(“not null”) – Any row with a discriminator value not matching any of the ones associated with entity definitions will be mapped to the class with this annotation. + + +## Class diagram + +![alt text](./etc/single-table-inheritance.urm.png "Singleton pattern class diagram") + +## Applicability + +Use the Singleton pattern when + +* Use STI When The Subclasses Have The Same Fields/Columns But Different Behavior + - A good indication that STI is right is when the different subclasses have the same fields/columns but different methods. In the accounts example above, we expect all the columns in the database to be used by each subclass. Otherwise, there will be a lot of null columns in the database. +

+* Use STI When We Expect To Perform Queries Across All Subclasses + - Another good indication STI is right is if we expect to perform queries across all classes. For example, if we want to find the top 10 accounts with the highest balances across all types, STI allows lets us use just one query, whereas MTI will require in memory manipulation. + + +### Tutorials + +- Java Brains - Single Table Inheritance + +## Consequences + +* Fields are sometimes relevant and sometimes not, which can be confusing + to people using the tables directly. +* Columns used only by some subclasses lead to wasted space in the database. + How much this is actually a problem depends on the specific data + characteristics and how well the database compresses empty columns. + Oracle, for example, is very efficient in trimming wasted space, particularly + if you keep your optional columns to the right side of the database + table. Each database has its own tricks for this. +* The single table may end up being too large, with many indexes and frequent + locking, which may hurt performance. You can avoid this by having + separate index tables that either list keys of rows that have a certain property + or that copy a subset of fields relevant to an index. +* You only have a single namespace for fields, so you have to be sure that + you don’t use the same name for different fields. Compound names with + the name of the class as a prefix or suffix help here. + +## Related patterns + +* MappedSuperclass +* Single Table +* Joined Table +* Table per Class + +## Credits + +* [Single Table Inheritance - martinFowler.com](https://www.martinfowler.com/eaaCatalog/singleTableInheritance.html) +* [Patterns of Enterprise Application Architecture](https://books.google.co.in/books?id=vqTfNFDzzdIC&pg=PA278&redir_esc=y#v=onepage&q&f=false) diff --git a/single-table-inheritance/etc/single-table-inheritance.urm.png b/single-table-inheritance/etc/single-table-inheritance.urm.png new file mode 100644 index 0000000000000000000000000000000000000000..f3abe8df6fec30ee0c98cfd85216da47d751b885 GIT binary patch literal 141489 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

WGPJP%%!*h|2o1I$EhPL+=v9H{FdHu8VIWN_ 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 Q_=VDvvIpY!{eAI&00pKuXaE2J literal 0 HcmV?d00001 diff --git a/single-table-inheritance/etc/single-table-inheritance.urm.puml b/single-table-inheritance/etc/single-table-inheritance.urm.puml new file mode 100644 index 000000000..644d27e07 --- /dev/null +++ b/single-table-inheritance/etc/single-table-inheritance.urm.puml @@ -0,0 +1,163 @@ +@startuml +package com.iluwatar.repository { + interface VehicleRepository { + } +} +package com.iluwatar.service { + class VehicleService { + - vehicleRepository : VehicleRepository + + VehicleService(vehicleRepository : VehicleRepository) + + deleteVehicle(vehicle : Vehicle) + + getAllVehicles() : List + + getVehicle(vehicleId : int) : Vehicle + + saveVehicle(vehicle : Vehicle) : Vehicle + + updateVehicle(vehicle : Vehicle) : Vehicle + } +} +package com.iluwatar.entity { + class Car { + - engineCapacity : int + + Car() + + Car(manufacturer : String, model : String, noOfPassengers : int, engineCapacity : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getEngineCapacity() : int + + hashCode() : int + + setEngineCapacity(engineCapacity : int) + + toString() : String + } + class Freighter { + - flightLength : double + + Freighter() + + Freighter(manufacturer : String, model : String, countOfSeats : int, loadCapacity : int, flightLength : double) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getFlightLength() : double + + hashCode() : int + + setFlightLength(flightLength : double) + + toString() : String + } + abstract class PassengerVehicle { + - noOfPassengers : int + + PassengerVehicle() + + PassengerVehicle(manufacturer : String, model : String, noOfPassengers : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getNoOfPassengers() : int + + hashCode() : int + + setNoOfPassengers(noOfPassengers : int) + + toString() : String + } + class Train { + - noOfCarriages : int + + Train() + + Train(manufacturer : String, model : String, noOfPassengers : int, noOfCarriages : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getNoOfCarriages() : int + + hashCode() : int + + setNoOfCarriages(noOfCarriages : int) + + toString() : String + } + abstract class TransportVehicle { + - loadCapacity : int + + TransportVehicle() + + TransportVehicle(manufacturer : String, model : String, loadCapacity : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getLoadCapacity() : int + + hashCode() : int + + setLoadCapacity(loadCapacity : int) + + toString() : String + } + class Truck { + + towingCapacity : int + + Truck() + + Truck(manufacturer : String, model : String, loadCapacity : int, towingCapacity : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getTowingCapacity() : int + + hashCode() : int + + setTowingCapacity(towingCapacity : int) + + toString() : String + } + abstract class Vehicle { + - manufacturer : String + - model : String + - vehicleId : int + + Vehicle() + + Vehicle(manufacturer : String, model : String) + + Vehicle(vehicleId : int, manufacturer : String, model : String) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getManufacturer() : String + + getModel() : String + + getVehicleId() : int + + hashCode() : int + + setManufacturer(manufacturer : String) + + setModel(model : String) + + setVehicleId(vehicleId : int) + + toString() : String + } +} +package com.iluwatar.abstractEntity { + abstract class PassengerVehicle { + - noOfPassengers : int + + PassengerVehicle() + + PassengerVehicle(manufacturer : String, model : String, noOfPassengers : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getNoOfPassengers() : int + + hashCode() : int + + setNoOfPassengers(noOfPassengers : int) + + toString() : String + } + abstract class TransportVehicle { + - loadCapacity : int + + TransportVehicle() + + TransportVehicle(manufacturer : String, model : String, loadCapacity : int) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getLoadCapacity() : int + + hashCode() : int + + setLoadCapacity(loadCapacity : int) + + toString() : String + } + abstract class Vehicle { + - manufacturer : String + - model : String + - vehicleId : int + + Vehicle() + + Vehicle(manufacturer : String, model : String) + + Vehicle(vehicleId : int, manufacturer : String, model : String) + # canEqual(other : Object) : boolean + + equals(o : Object) : boolean + + getManufacturer() : String + + getModel() : String + + getVehicleId() : int + + hashCode() : int + + setManufacturer(manufacturer : String) + + setModel(model : String) + + setVehicleId(vehicleId : int) + + toString() : String + } +} +package com.iluwatar { + class SingleTableInheritance { + - vehicleService : VehicleService + + SingleTableInheritance(vehicleService : VehicleService) + + main(args : String[]) {static} + + run(args : String[]) + } +} +SingleTableInheritance --> "-vehicleService" VehicleService +VehicleService --> "-vehicleRepository" VehicleRepository +PassengerVehicle --|> Vehicle +TransportVehicle --|> Vehicle +Car --|> PassengerVehicle +Freighter --|> TransportVehicle +PassengerVehicle --|> Vehicle +Train --|> PassengerVehicle +TransportVehicle --|> Vehicle +Truck --|> TransportVehicle +@enduml \ No newline at end of file diff --git a/single-table-inheritance/pom.xml b/single-table-inheritance/pom.xml new file mode 100644 index 000000000..159a683be --- /dev/null +++ b/single-table-inheritance/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.26.0-SNAPSHOT + + + single-table-inheritance + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + \ No newline at end of file diff --git a/single-table-inheritance/src/main/java/com/iluwatar/SingleTableInheritance.java b/single-table-inheritance/src/main/java/com/iluwatar/SingleTableInheritance.java new file mode 100644 index 000000000..01fbb37b8 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/SingleTableInheritance.java @@ -0,0 +1,93 @@ +package com.iluwatar; + +import com.iluwatar.entity.Car; +import com.iluwatar.entity.Truck; +import com.iluwatar.entity.Vehicle; +import com.iluwatar.service.VehicleService; +import java.util.List; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Single Table Inheritance pattern : + *
+ * It maps each instance of class in an inheritance tree into a single table. + *
+ *

+ * In case of current project, in order to specify the Single Table Inheritance to Hibernate + * we annotate the main Vehicle root class with @Inheritance(strategy = InheritanceType.SINGLE_TABLE) + * due to which a single root Vehicle class table will be created + * in the database and it will have columns for all the fields of + * it's subclasses(Car, Freighter, Train, Truck).
+ * Additional to that, a new separate "vehicle_id" column would be added + * to the Vehicle table to save the type of the subclass object that + * is being stored in the database. This value is specified by the @DiscriminatorValue annotation + * value for each subclass in case of Hibernate.
+ *


+ * Below is the main Spring Boot Application class from where the Program Runs. + *

+ * It implements the CommandLineRunner to run the statements at the + * start of the application program. + *

+ */ +@SpringBootApplication +@AllArgsConstructor +public class SingleTableInheritance implements CommandLineRunner { + + //Autowiring the VehicleService class to execute the business logic methods + private final VehicleService vehicleService; + + /** + * The entry point of the Spring Boot Application. + * + * @param args program runtime arguments + */ + public static void main(String[] args) { + SpringApplication.run(SingleTableInheritance.class, args); + } + + /** + * The starting point of the CommandLineRunner + * where the main program is run. + * + * @param args program runtime arguments + */ + @Override + public void run(String... args) throws Exception { + + Logger log = LoggerFactory.getLogger(SingleTableInheritance.class); + + log.info("Saving Vehicles :- "); + + // Saving Car to DB as a Vehicle + Vehicle vehicle1 = new Car("Tesla", "Model S", 4, 825); + Vehicle car1 = vehicleService.saveVehicle(vehicle1); + log.info("Vehicle 1 saved : {}", car1); + + // Saving Truck to DB as a Vehicle + Vehicle vehicle2 = new Truck("Ford", "F-150", 3325, 14000); + Vehicle truck1 = vehicleService.saveVehicle(vehicle2); + log.info("Vehicle 2 saved : {}\n", truck1); + + + log.info("Fetching Vehicles :- "); + + // Fetching the Car from DB + Car savedCar1 = (Car) vehicleService.getVehicle(vehicle1.getVehicleId()); + log.info("Fetching Car1 from DB : {}", savedCar1); + + // Fetching the Truck from DB + Truck savedTruck1 = (Truck) vehicleService.getVehicle(vehicle2.getVehicleId()); + log.info("Fetching Truck1 from DB : {}\n", savedTruck1); + + log.info("Fetching All Vehicles :- "); + + // Fetching the Vehicles present in the DB + List allVehiclesFromDb = vehicleService.getAllVehicles(); + allVehiclesFromDb.forEach(s -> log.info(s.toString())); + } +} \ No newline at end of file diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/Car.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/Car.java new file mode 100644 index 000000000..c8d3185fd --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/Car.java @@ -0,0 +1,39 @@ +package com.iluwatar.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * A class that extends the PassengerVehicle class + * and provides the concrete inheritance implementation of the Car. + * + * @see PassengerVehicle PassengerVehicle + * @see Vehicle Vehicle + */ + +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Entity +@DiscriminatorValue(value = "CAR") +public class Car extends PassengerVehicle { + + private int engineCapacity; + + public Car(String manufacturer, String model, int noOfPassengers, int engineCapacity) { + super(manufacturer, model, noOfPassengers); + this.engineCapacity = engineCapacity; + } + + // Overridden the toString method to specify the Vehicle object + @Override + public String toString() { + return "Car{" + + super.toString() + + '}'; + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/Freighter.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/Freighter.java new file mode 100644 index 000000000..ce35f3df3 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/Freighter.java @@ -0,0 +1,41 @@ +package com.iluwatar.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * A class that extends the TransportVehicle class + * and provides the concrete inheritance implementation of the Car. + * + * @see TransportVehicle TransportVehicle + * @see Vehicle Vehicle + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Entity +@DiscriminatorValue(value = "FREIGHTER") +public class Freighter extends TransportVehicle { + + private double flightLength; + + public Freighter(String manufacturer, String model, int loadCapacity, double flightLength) { + super(manufacturer, model, loadCapacity); + this.flightLength = flightLength; + } + + // Overridden the toString method to specify the Vehicle object + @Override + public String toString() { + return "Freighter{ " + + super.toString() + + " ," + + "flightLength=" + + flightLength + + '}'; + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/PassengerVehicle.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/PassengerVehicle.java new file mode 100644 index 000000000..c27818a9a --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/PassengerVehicle.java @@ -0,0 +1,30 @@ +package com.iluwatar.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * An abstract class that extends the Vehicle class + * and provides properties for the Passenger type of Vehicles. + * + * @see Vehicle + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public abstract class PassengerVehicle extends Vehicle { + + private int noOfPassengers; + + protected PassengerVehicle(String manufacturer, String model, int noOfPassengers) { + super(manufacturer, model); + this.noOfPassengers = noOfPassengers; + } + + @Override + public String toString() { + return super.toString(); + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/Train.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/Train.java new file mode 100644 index 000000000..10a74f36a --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/Train.java @@ -0,0 +1,38 @@ +package com.iluwatar.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * A class that extends the PassengerVehicle class + * and provides the concrete inheritance implementation of the Car. + * + * @see PassengerVehicle PassengerVehicle + * @see Vehicle Vehicle + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Entity +@DiscriminatorValue(value = "TRAIN") +public class Train extends PassengerVehicle { + + private int noOfCarriages; + + public Train(String manufacturer, String model, int noOfPassengers, int noOfCarriages) { + super(manufacturer, model, noOfPassengers); + this.noOfCarriages = noOfCarriages; + } + + // Overridden the toString method to specify the Vehicle object + @Override + public String toString() { + return "Train{" + + super.toString() + + '}'; + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/TransportVehicle.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/TransportVehicle.java new file mode 100644 index 000000000..9f9c60516 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/TransportVehicle.java @@ -0,0 +1,25 @@ +package com.iluwatar.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * An abstract class that extends the Vehicle class + * and provides properties for the Transport type of Vehicles. + * + * @see Vehicle + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public abstract class TransportVehicle extends Vehicle { + + private int loadCapacity; + + protected TransportVehicle(String manufacturer, String model, int loadCapacity) { + super(manufacturer, model); + this.loadCapacity = loadCapacity; + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/Truck.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/Truck.java new file mode 100644 index 000000000..e389666e4 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/Truck.java @@ -0,0 +1,38 @@ +package com.iluwatar.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * A class that extends the PassengerVehicle class + * and provides the concrete inheritance implementation of the Car. + * + * @see TransportVehicle TransportVehicle + * @see Vehicle Vehicle + */ +@Data +@NoArgsConstructor +@Entity +@DiscriminatorValue(value = "TRUCK") +public class Truck extends TransportVehicle { + + private int towingCapacity; + + public Truck(String manufacturer, String model, int loadCapacity, int towingCapacity) { + super(manufacturer, model, loadCapacity); + this.towingCapacity = towingCapacity; + } + + // Overridden the toString method to specify the Vehicle object + @Override + public String toString() { + return "Truck{ " + + super.toString() + + ", " + + "towingCapacity=" + + towingCapacity + + '}'; + } +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/entity/Vehicle.java b/single-table-inheritance/src/main/java/com/iluwatar/entity/Vehicle.java new file mode 100644 index 000000000..901a37705 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/entity/Vehicle.java @@ -0,0 +1,54 @@ +package com.iluwatar.entity; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * An abstract class that is the root of the Vehicle Inheritance hierarchy + * and basic provides properties for all the vehicles. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name = "VEHICLE_TYPE") +public abstract class Vehicle { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int vehicleId; + + private String manufacturer; + + private String model; + + protected Vehicle(String manufacturer, String model) { + this.manufacturer = manufacturer; + this.model = model; + } + + @Override + public String toString() { + return "Vehicle{" + + "vehicleId=" + + vehicleId + + ", manufacturer='" + + manufacturer + + '\'' + + ", model='" + + model + + '}'; + } + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/repository/VehicleRepository.java b/single-table-inheritance/src/main/java/com/iluwatar/repository/VehicleRepository.java new file mode 100644 index 000000000..5aec26c3a --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/repository/VehicleRepository.java @@ -0,0 +1,14 @@ +package com.iluwatar.repository; + +import com.iluwatar.entity.Vehicle; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * A repository that is extending the JPA Repository + * to provide the default Spring DATA JPA methods for the Vehicle class. + */ +@Repository +public interface VehicleRepository extends JpaRepository { + +} diff --git a/single-table-inheritance/src/main/java/com/iluwatar/service/VehicleService.java b/single-table-inheritance/src/main/java/com/iluwatar/service/VehicleService.java new file mode 100644 index 000000000..4aeacd048 --- /dev/null +++ b/single-table-inheritance/src/main/java/com/iluwatar/service/VehicleService.java @@ -0,0 +1,71 @@ +package com.iluwatar.service; + +import com.iluwatar.entity.Vehicle; +import com.iluwatar.repository.VehicleRepository; +import java.util.List; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * A service class that is used to provide the business logic + * for the Vehicle class and connect to the database to + * perform the CRUD operations on the root Vehicle class. + * + * @see Vehicle + */ +@Service +@AllArgsConstructor +public class VehicleService { + + private final VehicleRepository vehicleRepository; + + /** + * A method to save all the vehicles to the database. + * + * @param vehicle Vehicle bbject + * @see Vehicle + */ + public Vehicle saveVehicle(Vehicle vehicle) { + return vehicleRepository.save(vehicle); + } + + /** + * A method to get a specific vehicle from vehicle id. + * + * @param vehicleId Vehicle Id + * @see Vehicle + */ + public Vehicle getVehicle(int vehicleId) { + return vehicleRepository.findById(vehicleId).orElse(null); + } + + /** + * A method to get all the vehicles saved in the database. + * + * @see Vehicle + */ + public List getAllVehicles() { + return vehicleRepository.findAll(); + } + + /** + * A method to update a vehicle in the database. + * + * @param vehicle Vehicle object + * @see Vehicle + */ + public Vehicle updateVehicle(Vehicle vehicle) { + return vehicleRepository.save(vehicle); + } + + /** + * A method to save all the vehicles to the database. + * + * @param vehicle Vehicle object + * @see Vehicle + */ + public void deleteVehicle(Vehicle vehicle) { + vehicleRepository.delete(vehicle); + } + +} diff --git a/single-table-inheritance/src/main/resources/application.properties b/single-table-inheritance/src/main/resources/application.properties new file mode 100644 index 000000000..e2d8176fd --- /dev/null +++ b/single-table-inheritance/src/main/resources/application.properties @@ -0,0 +1,11 @@ + +# H2 Database Configuration +spring.datasource.url=jdbc:h2:mem:sti +spring.datasource.username=sa +spring.datasource.password=password +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.hibernate.ddl-auto=update + +#Uncomment the below properties to see the SQL being generated in backend +#spring.jpa.show-sql=true +#spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file