Vengo del futuro, el nombrado de las variables/clases en español tiene su propósito. No intenten implementar esta parte en Ingles.
Antes de empezar
Pasos para aprender Java Spring
Instalación de ambiente de desarrollo: Windows
¿Java sigue siendo gratuito?
Instalación de ambiente de desarrollo: Linux Ubuntu
Instalación de ambiente de desarrollo: macOS
Introducción a Spring boot
¿Qué es y qué usaremos de Spring?
Conocer qué es una aplicación autocontenida
Crear nuestra aplicación con Spring Initializr
Hola mundo con Spring Boot
Configurar Spring Boot
Crear la estructura del proyecto
Spring Data
¿Qué es JPA?
Conocer qué es Spring Data
Conectar la base de datos a nuestra aplicación
Mapear las tablas como clases
Crear Entity cuando su clave primaria es compuesta
Mapear relaciones entre clases
Usar la interface CrudRepository
Query Methods
Construyendo nuestra API
Implementar la anotación @Repository
¿Qué es el patrón Data Mapper y qué resuelve?
Orientar nuestra API al dominio con MapStruct
Orientar nuestro repositorio a términos del dominio
Inyección de dependencias
Implementar la anotación @Service
Implementar la anotación @RestController
Exponer nuestra API
Mejorando nuestra API
Controlar las respuestas HTTP
Crear el dominio de compras
Mapear el dominio de compras
Crear el repositorio de compras
Probando nuestros servicios de compras
Documentar nuestra API con Swagger
Spring Security
Configurar la seguridad de nuestra API con Spring Security
Generar un JWT
Autenticación con JWT
Autorización con JWT
Despliegue de nuestra aplicación
Desplegar nuestra API desde la ventana de comandos
Desplegar nuestra base de datos con Heroku
Desplegar nuestra API con Heroku
Conclusiones y despedida del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 59
Preguntas 25
Vengo del futuro, el nombrado de las variables/clases en español tiene su propósito. No intenten implementar esta parte en Ingles.
Quisiera dar una mencion aca, desde mi perspectiva, aunque en la clase se usa el tipo Integer para los identificadores o ids, a la larga este tipo de dato no es sustentable, por eso recomiendo el uso del tipo Long.
Con la libería Lombok podemos generar automáticamente los getters y setters usando anotaciones y así ahorrarnos mucho código.
Para incluirla debemos añadir esta dependencia en gradle:
compile 'org.projectlombok:lombok:1.18.12'
y ya solo bastaría agregar las anotaciones en la clase para generar los getters y setters
@Getter
@Setter
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Long categoryId;
private String sku;
private Double price;
private Integer stock;
private boolean status;
}
Si ponemos @Getter y @Setter a nivel de clase, se generarán getters y setters para todas sus propiedades. Si queremos getters y setters para sólo una propiedad basta con poner las anotaciones arriba de la propiedad.
no es buena practica en los imports hacer .*
el ide despues de 4 lo hará automaticamente pero se puede cambiar la propiedad del ide para que automaticamente agregue todo el paquete despúes de 1000 o cualquier número alto
Hay una libreria que se llama Lombok que nos ayuda a ahorrar codigo, esta libreria genera los get y los set de manera automatica.
Categoria
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "categorias")
public class Category {
@Id
@Column(name = "id_categoria")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "description")
private String description;
@Column(name = "estado")
private Boolean active;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
}
Cliente
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "clientes")
public class Client {
@Id
private String id;
@Column(name = "nombre")
private String firtsName;
@Column(name = "apellidos")
private String lastName;
@Column(name = "celular")
private Long cellphone;
@Column(name = "direccion")
private String address;
@Column(name = "correo_electronico")
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirtsName() {
return firtsName;
}
public void setFirtsName(String firtsName) {
this.firtsName = firtsName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Long getCellphone() {
return cellphone;
}
public void setCellphone(Long cellphone) {
this.cellphone = cellphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
¿Alguien me puede explicar esto? No lo entendí bien 😦
El cliente ya tiene su clave primaria definida y no necesitamos generarla
Hello guys, I’m going to share my way how I solved this challenge, have a look. I used lombook dependency to avoid generating getters and setters methods, In my point of view our entities looks better.
https://github.com/borisbikes/platzi/tree/main/Spring/platzi-market/src/main/java/com/platzi/market/persistence/entity
Vengo también del futuro. Cuando estén mapeando la clase “Cliente”, tengan cuidado al definir al atributo “id”. Este debe ser de tipo “String”. No cometan el error de declararlo como un tipo Integer, ya que este error es común y es el causante de varios errores en etapas posteriores.
Me gusta usar el proyecto Lombok para no escribir los getters y setters.
¿Alguien instalo lombok? Digo… para no tener que estar generando los gets y sets
Este es mi codigo
categorias
package com.platzi.market.persistence.entity;
import javax.persistence.*;
@Entity
@Table(name = "categorias")
public class Categoria {
@Column(name = "id_categoria" )
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Cliente
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Integer celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
Yo suelo usar estas anotaciones en mis proyectos, se las recomiendo:
@Entity
@Table(name = "productos")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@SuperBuilder
public class Producto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_producto")
private Integer idProducto;
private String nombre;
@Column(name = "id_categoria")
private Integer idCategoria;
@Column(name = "codigo_barras")
private String codigoBarras;
@Column(name = "precio_venta")
private Double precioVenta;
@Column(name = "cantidad_stock")
private Integer cantidadStock;
private Boolean estado;
}
En este caso, preferí usar Lombok, para no tener que generar los Getter y Setter
Buenos días, otro aporte que es bueno mencionar es el tema del idioma, por lo general y buena practica es mejor dejar todo en ingles, también es bueno utilizar la propiedad length para delimitar la cantidad de caracteres desde la entidad creada.
@Entity
@Table(name = "productos")
public class product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_producto")
private Integer idProduct;
@Column(name = "nombre", length = 45)
private String name;
@Column(name = "id_categoria")
private Integer idCategory;
@Column(name = "codigo_barras", length = 150)
private String barCode;
@Column(name = "precio_venta", length = 16)
private Double price;
@Column(name = "cantidad_stock")
private Integer stockQuantity;
@Column(name = "estado")
private Boolean status;
De todos los cursos de JAVA en Platzi, ha sido el mejor profesor como va explicando todo mientras lo va haciendo!
El código es mas limpio y fácil de leer
Toda la clase es como se ve en la imagen (Así de sencillo)
Para los que les sale algun error en Intellij porque no coincide el nombre de las Columna o Tablas:
https://stackoverflow.com/questions/14356148/intellij-idea-specify-datasource-for-jpa-validation
Les recomiendo instalar el plugin JPA Support para Intellij. Les permitirá crear los entity automáticamente
package com.platzi.market.persistencia.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name=“categorias”)
public class Categoria {
@Column(name="id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Les recomiendo utilizar la dependencia Lombok para no tener que generar Getters and Setters manualmente.
Si alguien al igual que yo esta haciendo el proyecto en kotlin, deben usar la siguiente configuracion:
build.gradle.kts
plugins {
id("org.springframework.boot") version "2.3.3.RELEASE"
id("io.spring.dependency-management") version "1.0.10.RELEASE"
kotlin("jvm") version "1.3.72"
kotlin("plugin.spring") version "1.3.72"
kotlin("plugin.allopen") version "1.3.72"
kotlin("plugin.jpa") version "1.3.72"
}
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}```
Esto permite que se generen constructores vacíos necesarios para la interoperabilidad con las anotaciones de persistencia.
Y la entidad queda como esta:
```kotlin
@Entity
@Table(name = "productos")
class Producto (
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_producto")
var id: Int,
@Column(name = "nombre")
var name: String,
@Column(name = "id_categoria")
var categoryId: Int,
@Column(name = "codigo_barras")
var barCode: String,
@Column(name = "precio_venta")
var price: Double,
@Column(name = "cantidad_stock")
var stock: Int,
@Column(name = "estado")
var state: Boolean
)```
Pregunta: ¿los campos medio_pago y estado por qué no se declararon de tipo Character si en BD están de tipo character y se le puso de tipo String en el entity?
Desafio cumplido:
Cliente
@Entity
@Table(name = "clientes")
@Getter
@Setter
@NoArgsConstructor
@ToString
public class Cliente {
@Id
@Column(name="id", length = 20)
private String idCliente;
@Column(name="nombre", length = 40)
private String nombre;
@Column(name="apellidos", length = 100)
private String apellido;
private Integer celular;
@Column(name="direccion", length = 80)
private String direccion;
@Column(name="correo_electronico", length = 70)
private String email;
public Cliente(String nombre, String apellido, Integer celular, String direccion, String email) {
this.nombre = nombre;
this.apellido = apellido;
this.celular = celular;
this.direccion = direccion;
this.email = email;
}
}
Categoria
@Entity
@Table(name = "categorias")
@Getter
@Setter
@NoArgsConstructor
@ToString
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idCategoria;
@Column(length = 45)
private String descripcion;
private Boolean estado;
public Categoria ( String descripcion, Boolean estado){
this.descripcion = descripcion;
this.estado = estado;
}
}
Recomiendo leer este artículo que hace referencia a errores comunes que se pueden presentar al utilizar la combinación Lombok/Hibernate, especialmente con la anotación @Data.
Perfecto, todo está saliendo bastante bien, continuemos
Para las personas que tienen problema con @Table y @Column (Cannot resolve <table o column>) lo más probable es que no tengan algún data source agregado a su IDE.
Para agregar un data source en inteliJ IDEA:
View > Tool Windows > Database
En el menu de Database:
New (Signo +) > Data Source > Postgres (O la DB que estés utilizando)
Por último, pasa el cursor en alguno de los errores marcados y agrega el nuevo data source. Suerte!
Hay una forma de crear las tablas automáticamente desde el mismo código, sin necesidad de estar manipulado la BD. Podemos hacer uso de la propiedad spring.jpa.hibernate.ddl-auto=create, esta la agregamos en el archivo application.properties y cuando creamos las Entity en nuestro proyecto y corremos el App, la tabla es creada automáticamente en la base de datos.
Existe una manera de no poner los getter y setters de la manera mostrada. De esta manera será mas limpia la clase. Les recomiendo que coloquen @Data antes del "public class Producto{"
Para esto tienen que usar Lombok. Para esto tendrán que usar implementation ‘org.projectlombok:lombok’ como dependencia y descargar el plug in dentro de intellij idea
Este profe es un pro en la explicación, hace entender todo de una manera tan sencilla, hasta me inspira a seguir, hay otro de Spring pero no se le entiende bien
Por lo general, por lo que he visto, no se suele hacer un método Getter y Setter para los id debido a que de nada nos sirve cambiar el id manualmente y en una base de datos gigante se podrían llegar a tener problemas si se editara dicha variable.
Para que la clase les quede mas elegante usen el framework lombok y les quedará así
@Entity
@Table(name = “productos”)
@Getter
@Setter
public class Producto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_producto")
private Integer idProducto;
private String nombre;
@Column(name = "id_categoria")
private Integer idCategoria;
@Column(name = "codigo_barras")
private String codigoBarras;
@Column(name = "precio_venta")
private Double precioVenta;
@Column(name = "cantidad_stock")
private Integer cantidadStock;
private Boolean estado;
}
Ya no necesitan, getter y setters
Si estas haciendo el proyecto en vscode, existe una extension llamada PostgreSQL Explorer para poder gestionar el schema de tu base de datos y ejecutar consultas. La puedes encontar aqui:
https://marketplace.visualstudio.com/items?itemName=ckolkman.vscode-postgres
Clase categoría:
package com.platzi.market.persistence.entity;
import javax.persistence.*;
@Entity
@Table(name = "categorias")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Clase cliente:
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="clientes")
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Double celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Double getCelular() {
return celular;
}
public void setCelular(Double celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
si utilizas @FieldDefaults(level = AccessLevel.PRIVATE) agerega un modificador de acceso private a todos los atributos de la clase, ahorrando escribir private a cada campo.
para que quede tu clase limpia y evites incluir getters y setters constante mente en tus modelos de datos o entidades, recomiendo usar la API Lombok de la siguiente manera en tu build.gradle
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
<code>
y en tu entidad java de la siguiente manera
@Entity
**@Data**
@Table(name = "productos")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_producto", nullable = false)
private Long id;
@Column(name="nombre")
private String name;
}
Alternativas de Getters y Setters con Lombok
Pude completar el reto. Está en mi repositorio de Github
@Entity
@Table(name = "categorias")
public class Categoria {
@Column(name = "id_categoria")
private Integer idCategaria;
private String descripcion;
private Boolean estado;
}
@Entity
@Table(name = "clientes")
public class Cliente {
private String id;
private String nombre;
private String apellidos;
private Integer celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
}
<package com.platzi.market.persistence.entity;
import javax.persistence.*;
@Entity
@Table(name = "categorias")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}>
<package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Integer celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}>
Les dejo esta lectura para conocer más de spring data y porque usar generate en identity or secuency
Que buena clase, empieza lo interesante
Para no generar los Getter y Setter se puede hacer con las anotacciones de: @Getter y @Setter de la dependencia de lombok. Link: https://projectlombok.org/
Categoria
package com.platzi.market.persistence.entities;
import javax.persistence.*;
@Entity
@Table(name = "categorias")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Cliente
package com.platzi.market.persistence.entities;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Integer celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
En el Script de la bd … la columna id de categoria es id y no “id_categoria”…
Hola, que tal!!!
¿Cómo harían para el caso de que todas sus tablas tengan un campo de el usuario que hizo el registro o modificación?
Se me hace como muy contaminante en todas mis clases tener un atributo que se llame @Column(name = “USUARIO_REG”) private String usuario;
Habrá forma de tener como algun interceptor o algo que en todas mis acciones de save me coloque ese dato en el usuario ? espero darme a entender
Tengo una consulta yo estoy trabajando con Spring tool suite y para que me reconozca las dependencias del archivo build.gradle, tengo que colocar compile(‘org.springframework.boot:spring-boot-starter-data-jpa’) para que me reconozca la dependecia, ahora mi consulta es que diferencia hay entre implementation y compile en el archivo de configuración de build.gradle
package com.platzi.market.persistencia.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name=“clientes”)
public class Cliente {
private String id;
private String nombre;
private String apellido;
private Integer celular;
private String dirección;
@Column(name=“correo_electronico”)
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDirección() {
return dirección;
}
public void setDirección(String dirección) {
this.dirección = dirección;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
Clase Categoría
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "categorias")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Clase Cliente
package com.platzi.market.persistence.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Integer celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
Hola chicos y chicas, tengo entendido que en cualquier tabla es buena práctica siempre declarar un campo autoincrementable y que generalmente este sea el id y pues que la identificación suele ser un campo único en la base de datos mas no una llave primaria, saludos!!
Una pregunta muy puntual, ¿Porqué en las en la mayoría de las entidades no se implementa la interfaz Serializable?
Me ha gustado mucho la explicacion, detalla cada cosa, y su deseo porque los estudiantes comprendan a la perfeccion los temas, esto es Universidad De Desarrollo de software Platzi…
Excelente, la creación sencilla y ordenada, muy bien explicado
Si están usando JDK15 y no les reconoce las anotaciones del paquete jaba.persistence, deben agregar la dependencia al proyecto:
// https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api
compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
Puede verse en este repo de maven repository.
Categoria.java:
package com.platzi.market.persistence.entity;
import javax.persistence.*;
@Entity
@Table(name = “categorias”)
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_categoria")
private Integer idCategoria;
private String descripcion;
private Boolean estado;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Boolean getEstado() {
return estado;
}
public void setEstado(Boolean estado) {
this.estado = estado;
}
}
Cliente.java:
package com.platzi.market.persistence.entity;
import javax.persistence.*;
@Entity
@Table(name = “clientes”)
public class Cliente {
@Id
private String id;
private String nombre;
private String apellidos;
private Long celular;
private String direccion;
@Column(name = "correo_electronico")
private String correoElectronico;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Integer getCelular() {
return celular;
}
public void setCelular(Integer celular) {
this.celular = celular;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getCorreoElectronico() {
return correoElectronico;
}
public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}
}
En caso el nombre del atributo en camel case coincida con el nombre de la tabla en snake case, no es necesario usar la anotación column.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.