JPA @Table y @Entity son dos anotaciones de JPA que a veces nos generan dudas ya que nos hacen pensar que son muy parecidas e incluso tenemos dudas de si hacen falta las dos . Vamos a hablar un poco de ellas . En primer lugar @Table es la anotación que nos permite mapear nuestra entidad contra una tabla que tenga un nombre distinto. Es decir si por ejemplo tenemos la siguiente entidad.
package com.arquitecturajava.aplicacion.adapters.out.jpa; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity(name="Producto") @Table(name="Productos") public class ProductoEntity { @Id private String numero; private String concepto; private double importe; @ManyToOne @JoinColumn(name = "categoria_id") private CategoriaEntity categoria; public CategoriaEntity getCategoria() { return categoria; } public void setCategoria(CategoriaEntity categoria) { this.categoria = categoria; } public String getNumero() { return numero; } public void setNumero(String id) { this.numero = id; } public String getConcepto() { return concepto; } public void setConcepto(String concepto) { this.concepto = concepto; } public double getImporte() { return importe; } public void setImporte(double importe) { this.importe = importe; } public ProductoEntity(String numero, String concepto, double importe) { super(); this.numero = numero; this.concepto = concepto; this.importe = importe; } public ProductoEntity() { super(); } }
JPA @Table
Como podemos observar estamos utilizando @Table . Esta anotación nos permite decidir contra que tabla de la base de datos nuestra entidad se va a mapear . En muchas situaciones la entidad no tiene el mismo nombre exacto de la base de datos y nos viene bien usar esta anotación.
JPA @Entity
En muchas ocasiones es un poco más dificil de entender para que se usa @Entity con un name ya que @Entity simplemente registra la entidad. Esto se hace porque hay situaciones en las cuales a nivel de JPA Query Languaje queremos que el nombre de la entidad a nivel de consulta no sea identico al nombre de la clase para permitir simplificar a nivel de consulta
Tengamos siempre en cuenta estas dos anotaciones JPA @Table y JPA @Entity cuando trabajamos con JPA ya que en muchos casos su uso es prácticamente obligatorio ya sea una u otra.