Hibernate creando nuestras entidades para el sistema de facturación | Java

Como sabemos nosotros vamos a generar las tablas a partir de entidades, ya que desde mi punto de vista esto nos permite poder cambiar y actualizar a nuestra manera las tablas en distintas bases de datos y no depender de una sola; ya que como se sabe también podemos crear las entidades a partir de tablas pero esto implica que nuestro framework decida el tipo de variable a utilizar y también las anotaciones van a ser dictadas por la herramienta.

Actualmente contamos con 17 entidades o modelos que serán las tablas que se generen en la base de datos; ten en cuenta que las entidades pueden cambiar en el desarrollo o tú puedes agregar tus propias clases y agregarle otros atributos que creas necesarios, aquí se listará todas las entidades, aunque solo de algunas se compartirá el código por lo extenso que resulta.
  1. Customer.java
  2. DatabaseLog.java
  3. DatabaseTable.java
  4. Detail.java
  5. Employee.java
  6. Invoice.java
  7. Module.java
  8. PaymentMethod.java
  9. Permission.java
  10. Person.java
  11. Product.java
  12. ProductCategory.java
  13. Provider.java
  14. Role.java
  15. Tax.java
  16. User.java
  17. UserRole.java
Ahora vamos a ver un ejemplo de unas pocas entidades.

La siguiente entidad es de la clase Module que será la encargada de almacenar los distintos módulos de nuestro sistema.
import java.io.Serializable;
import java.sql.Timestamp;

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 = "modules")
public class Module implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id", columnDefinition = "INTEGER")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "name", columnDefinition = "VARCHAR(50) UNIQUE NOT NULL")
    private String name;

    @Column(name = "description", columnDefinition = "VARCHAR(100) NOT NULL")
    private String description;

    @Column(name = "creation_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL")
    private Timestamp creationDate;

    @Column(name = "update_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL")
    private Timestamp updateDate;

    @Column(name = "status", columnDefinition = "BOOLEAN NOT NULL")
    private boolean status;

    public Module() {
        // TODO Auto-generated constructor stub
    }
}
Ahora vamos a ver la clase Person que tiene los datos básicos de una persona, puede tener menos o más campos dependiendo del uso que se le vaya a dar al software o si es que tu cliente pide que se agreguen más datos necesarios para su negocio.
import java.io.Serializable;
import java.sql.Timestamp; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "persons") public class Person implements Serializable {     private static final long serialVersionUID = 1L;     @Id     @Column(name = "id_card", columnDefinition = "VARCHAR(13)")     private String idCard;     @Column(name = "name", columnDefinition = "VARCHAR(50) NOT NULL")     private String name;     @Column(name = "last_name", columnDefinition = "VARCHAR(50) NOT NULL")     private String lastName;     @Column(name = "date_birth", columnDefinition = "DATE")     private Date dateBirth;     @Column(name = "sex", columnDefinition = "CHAR(1)")     private String sex;     @Column(name = "address", columnDefinition = "TEXT")     private String address;     @Column(name = "postal_code", columnDefinition = "VARCHAR(10)")     private String postalCode;     @Column(name = "email", columnDefinition = "VARCHAR(50)")     private String email;     @Column(name = "phone", columnDefinition = "VARCHAR(20)")     private String phone;     @Column(name = "creation_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL", updatable = false)     private Timestamp creationDate;     @Column(name = "update_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL")     private Timestamp updateDate;     @Column(name = "status", columnDefinition = "BOOLEAN NOT NULL")     private boolean status;     public Person() {     }
Como siguiente ejemplo vamos a mostrar como quedaría la clase Proveedor ya que este va a guardar como llave primaria a su llave foránea perteneciente a Persona, lo que implica hacer una relación de Uno a Uno ya que una persona puede ser un proveedor y un proveedor necesariamente tiene que ser una persona.
import java.io.Serializable;
import java.util.ResourceBundle;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "providers")
public class Provider implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @OneToOne
    @JoinColumn(name = "person_id")
    private Person person;

    @Column(name = "creation_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL", updatable = false)
    private Timestamp creationDate;

    @Column(name = "update_date", columnDefinition = "TIMESTAMP WITH TIME ZONE NOT NULL")
    private Timestamp updateDate;

    @Column(name = "status", columnDefinition = "BOOLEAN NOT NULL")
    private boolean status;

    public Provider() {
        // TODO Auto-generated constructor stub
    }
}
Estos son algunos ejemplos, como dije anteriormente no voy a poner todas las entidades porque es demasiado extenso y con unas pocas se puede entender el concepto.

Si se fijan bien todas tienen 3 atributos en común que son fecha de creación, fecha de actualización y estatus que lo que nos va a ayudar es a tener un pequeño control acerca de la fecha en que se insertaron los datos y actualizaron, además tenemos el campo estado que nos dirá si el registro está activo o inactivo.

Recuerda que debes generar los getters and setters de cada atributo para poder acceder desde otra clase.

← Anterior

Siguiente →

Comentarios

Entradas populares