En aquest tema, aprendrem a crear entitats JPA (Java Persistence API) utilitzant Spring Boot. Les entitats JPA són classes Java que representen taules en una base de dades relacional. Aquestes classes ens permeten mapar les dades de la base de dades a objectes Java, facilitant així la manipulació de dades dins de l'aplicació.

Objectius

  • Entendre què és una entitat JPA.
  • Aprendre a crear una entitat JPA.
  • Configurar les relacions entre entitats.
  • Utilitzar anotacions JPA per definir el mapeig de les entitats.

Què és una entitat JPA?

Una entitat JPA és una classe Java que està anotada amb @Entity i representa una taula en una base de dades. Cada instància de l'entitat correspon a una fila de la taula. Les propietats de la classe es mapen a les columnes de la taula.

Creant una entitat JPA

Pas 1: Definir la classe de l'entitat

Comencem creant una classe Java que representi la nostra entitat. Per exemple, crearem una entitat User que representi una taula d'usuaris.

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String username;
    private String password;
    private String email;

    // Constructors, getters i setters
    public User() {}

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Explicació del codi

  • @Entity: Aquesta anotació indica que la classe és una entitat JPA.
  • @Id: Marca el camp id com la clau primària de l'entitat.
  • @GeneratedValue(strategy = GenerationType.IDENTITY): Indica que el valor de id es generarà automàticament per la base de dades.
  • Les propietats username, password i email es mapen a les columnes de la taula User.

Pas 2: Configurar les relacions entre entitats

Les entitats poden tenir relacions entre elles, com ara un a molts, molts a un, o molts a molts. Utilitzarem anotacions JPA per definir aquestes relacions.

Exemple: Relació un a molts

Suposem que un usuari pot tenir molts articles (Article). Definim la relació un a molts entre User i Article.

import javax.persistence.*;
import java.util.List;

@Entity
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String username;
    private String password;
    private String email;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Article> articles;

    // Constructors, getters i setters
    // ...
}
import javax.persistence.*;

@Entity
public class Article {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String title;
    private String content;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    // Constructors, getters i setters
    // ...
}

Explicació del codi

  • @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true): Defineix una relació un a molts entre User i Article. El camp mappedBy indica que la relació es maparà a través del camp user de l'entitat Article.
  • @ManyToOne: Defineix una relació molts a un entre Article i User.
  • @JoinColumn(name = "user_id"): Especifica la columna de la taula Article que conté la clau forana que apunta a la taula User.

Exercici pràctic

Exercici 1: Crear una entitat Product

  1. Crea una classe Product que representi una taula de productes amb els següents camps:

    • id (clau primària, generada automàticament)
    • name (nom del producte)
    • price (preu del producte)
    • description (descripció del producte)
  2. Defineix els constructors, getters i setters per a la classe Product.

Solució

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Product {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private Double price;
    private String description;

    // Constructors, getters i setters
    public Product() {}

    public Product(String name, Double price, String description) {
        this.name = name;
        this.price = price;
        this.description = description;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

Resum

En aquest tema, hem après a crear entitats JPA utilitzant Spring Boot. Hem vist com definir una classe d'entitat, com configurar les relacions entre entitats i com utilitzar anotacions JPA per definir el mapeig de les entitats. També hem practicat creant una entitat Product. En el proper tema, aprendrem a utilitzar repositoris de Spring Data per accedir a les dades emmagatzemades en aquestes entitats.

Curs de Spring Boot

Mòdul 1: Introducció a Spring Boot

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

Mòdul 6: Proves a Spring Boot

Mòdul 7: Funcions avançades de Spring Boot

Mòdul 8: Desplegant aplicacions Spring Boot

Mòdul 9: Rendiment i monitorització

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats