Θα δημιουργήσουμε τους πίνακες brands, categories, product_images, inventory στη βάση δεδομένων, καθώς και τα αντίστοιχα entities τους.
Θα χρησιμοποιήσουμε το pgAdmin4, για την δημιουργία των πινάκων
Ο πίνακας categories( id, name) περιέχει τις κατηγορίες των προϊόντων. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω
Θα δημιουργήσουμε ένα package springeshop.model, όπου θα τοποθετούμε τα entities. Μέσα σε αυτό δημιουργούμε το entity Category.
@Entity
@Table(name = "categories")
public class Category{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
@NotNull(message = "Please provide category name")
@Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
private String name;
public Category() {}
//Getters - Setters ...
}
Ο πίνακας brands( id, name) περιέχει τις μάρκες των προϊόντων. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω
Δημιουργούμε το entity Brands.
@Entity
@Table(name = "brands")
public class Brand{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
@NotNull(message = "Please provide brand name")
@Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
private String name;
public Brand() {}
//Getters - Setters ...
}
Ο πίνακας products( id, category_id, brand_id, name, price, description, is_favorite, is_new) περιέχει τα διάφορα προϊόντα. Έχει δύο ξένα κλειδιά category_id και brand_id, που δείχνουν στους πίνακες categories και brands. Μια κατηγορία περιέχει πολλά προϊόντα, ενώ ένα προϊόν ανήκει σε μία μόνο κατηγορία. Αντίστοιχα, μια μάρκα μπορέι, να έχει πολλά προϊόντα, ενώ ένα προϊόν έχει μία μοναδική μάρκα.
Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω
Δημιουργούμε το entity Product.
@Entity
@Table(name = "products")
public class Product{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@ManyToOne(optinal = false)
@JoinColumn(name = "category_id")
@NotNull
private Category category;
@ManyToOne(optinal = false)
@JoinColumn(name = "brand_id")
@NotNull
private Brand brand;
@Column(name = "name")
@NotNull(message = "Please provide product name")
@Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
private String name;
@Column(name = "price")
@NotNull(message = "Please provide product price")
@Min(value = 0, message = "Price must be greater than zero")
private double price;
@Column(name = "description")
private String description;
@Column(name = "is_favorite")
@NotNul(
private boolean is_favorite;
@Column(name = "is_new")
@NotNull
private boolean is_new;
public Product() {}
//Getters - Setters ...
}
Ο πίνακας product_images( id, product_id, small_image_url, large_image_url, very_small_image_url) περιέχει την εικόνα του κάθε προϊόντος (3 μεγέθη). Κάθε γραμμή του πίνακα product_images αντιστοιχεί σε μια γραμμή του πίνακα products και το αντίστροφο. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω
Δημιουργούμε το entity ProductImage.
@Entity
@Table(name = "product_images)
public class ProductImage{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private Product product;
@Column(name = "small_image_url")
@NotNull(message = "Please provide the small image url")
private String smallImageurl;
@Column(name = "large_image_url")
@NotNull(message = "Please provide the large image url")
private String largeImageurl;
@Column(name = "very_small_image_url")
@NotNull(message = "Please provide the very small image url")
private String verySmallImageurl;
public ProductImage() {}
//Getters - Setters ...
}
Ο πίνακας inventory( id, product_id, quantity) περιέχει το απόθεμα του κάθε προϊόντος). Κάθε γραμμή του πίνακα inventory αντιστοιχεί σε μια γραμμή του πίνακα products και το αντίστροφο. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω :
Δημιουργούμε το entity Inventory.
@Entity
@Table(name = "inventory)
public class Inventory{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private Product product;
@Column(name = "quantity")
@NotNull
@Min(value = 0)
private int quantity;
public Inventory() {}
//Getters - Setters ...
}