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.
- Customer.java
- DatabaseLog.java
- DatabaseTable.java
- Detail.java
- Employee.java
- Invoice.java
- Module.java
- PaymentMethod.java
- Permission.java
- Person.java
- Product.java
- ProductCategory.java
- Provider.java
- Role.java
- Tax.java
- User.java
- 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.
Comentarios
Publicar un comentario