Entidades o Entities
Como lo hicimos en el tutorial de Spring Boot Security utilizaremos solamente dos entidades, User y Role. Y Aprovecharemos una conifiguracion de Spring Boot para crear las tablas automaticamente, y recordemos que con la anotacion @ManyToMany se creara una tabla transaccional.
Paso a Paso
Crea un paquete para todas las entidades dentro de tu proyecto.
Utilizando @GenericGenerator(name=”native”,strategy=”native”) indicamos a hibernate que queremos utilizar la opcion propia de autoincremento de MySQL. Sino ponemos esta anotacion hibernate creara una tabla de secuencias para manterner el autoincremento del id.
1.Crear Role
package com.cristianruizblog.springbootApp.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Role implements Serializable {
private static final long serialVersionUID = -2969524610059270447L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="native")
@GenericGenerator(name="native",strategy="native")
private Long id;
@Column
private String name;
@Column
private String description;
<br> <br> //Getters, Setters, HashCode, Equals & ToString Functions
}
2.Crear User
La anotación @Transient no sea explicado anteriormente, esta es necesaria cuando queremos tener campos en nuestra entidad pero no queremos que tenga ninguna relación con la tabla de la base de datos.
package com.cristianruizblog.springbootApp.entity;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Transient;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.JoinColumn;
@Entity
public class User implements Serializable{
private static final long serialVersionUID = -6833167247955613395L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="native")
@GenericGenerator(name="native",strategy="native")
private Long id;
@Column
private String firstName;
@Column
private String lastName;
@Column(unique = true)
private String email;
@Column(unique = true)
private String username;
@Column
private String password;
@Transient
private String confirmPassword;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="user_roles"
,joinColumns=@JoinColumn(name="user_id")
,inverseJoinColumns=@JoinColumn(name="role_id"))
private Set roles;
public User() { }
public User(Long id) {
this.id = id;
}<br> <br>//Getters, Setters, HashCode, Equals & ToString Functions
}
3.Hibernate Auto DDL
Para que nuestras tablas se creen automáticamente basadas en nuestras entidades es necesario tener la siguiente linea en nuestro application.properties. (Si completaste el post anterior es necesario solamente quitar el comentario de la ultima linea)
spring.jpa.hibernate.ddl-auto=create
Asegúrate de eliminar o convertir la linea como comentario, sino lo haces cada vez que inicies la aplicación eliminara y crear las tablas de nuevo.
Si hiciste todo bien deberías de ver las siguientes lineas en la consola y tambien las siguientes tablas en tu base de datos.
4.Insertar Datos
Necesitaremos crear un usuario base para nuestra aplicacion y en este caso sera Admin, ademas tendremos 3 roles (Admin, Manager, User)
5.Git Commit
Para concluir con este post hay que hacer commit de la siguiente manera.
Github Commit:
https://github.com/cruizg93/Spring-Boot-Aplicacion/commit/bc098239c50a6705d61abadbef7d4e67581dd868
6.Video Paso a Paso
Menu
- Setup
- Entidades y POJOS
- Basic HTML
- Lista de Usuarios
- Crear Usuario y Validar Campos
- Editar Usuario
- Eliminar Usuario
- Cambiar Contraseña
- Spring Security
- Paginas de Error
- Bonus, Arreglando Cositas
- Formulario de registro
- Despliegue en Heroku
Gracias por llegar al final de este post.
No se te olvide dejar tus comentario o preguntas aca abajo o en mi twitter @Cruizg93