Para que un Java Bean pueda ser guardado en una base de datos debe ser anotado como @Entity.
Una entidad debe cumplir una serie de restricciones como, por ejemplo, tener un constructor vacío, ya sea público o protegido, poseer un campo que sea clave primaria, @Id. Veamos un ejemplo:
@Entity @Table(name="USUARIOS") public class Usuario { @Id private String nick; ... public Usuario() { } // Getters y Setters }
La mayoría de motores de persistencia para JPA permiten omitir la declaración del constructor vacío.
La anotación @Table nos permite especificar el nombre de la tabla donde se persistirá la entidad, permite seguir la especificación de clases en singular y tablas en plural, si no está incluida la entidad se persistirá en una tabla que coincida con el nombre de la clase. La anotación @Id marca el identificador de la clase, es decir, su clave primaria.
Además, JPA define que los tipos primitivos, clases "envoltorio" de tipos primitivos, java.lang.String, byte[], Byte[], char[], Character[], java.math.BigDecimal, java.math.BigInteger, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Timestamp son mapeados de forma automática en columnas, es decir, no es necesario marcarlos. Además todos aquellos objetos que sean de tipo Serializable y estén marcados con la anotación @Basic.
Si lo que queremos es que una variable, de las que son mapeadas de forma automática, no sea tomada como un campo deberemos usar la anotación @Transient.
JPA incluye formas de mapear cada campo indicando nombres de columna y otros valores.
@Entity @Table(name="USUARIOS") public class Usuario { @Id private String nick; @Column(name="PASSWORD", nullable=false) private String pass; @Column(name="E-MAIL", nullable=false) private String mail; @Lob @Basic(fetch=FetchType.LAZY) private byte[] imagen; ... public Usuario() { } // Getters y Setters }
La anotación @Column permite definir varias propiedades. La propiedad name especifica el nombre de la columna donde va a ser persistido el campo, si esta propiedad no está presente el framework de persistencia usará el nombre de la variable como nombre de la columna. La propiedad nullable indica si la columna acepta valores null o no, si no se incluye el valor por defecto es true. Además esta anotación soporta otras muchas propiedades como pueden ser columnDefinition, length, precision, scale, insertable, updatable y table.
La anotación @Basic permite, además de lo dicho anteriormente, definir las propiedades opcional y fetch. La propiedad optional funciona igual que la propiedad nullable de la anotación @Column. La propiedad fetch permite definir cuando se debe cargar el campo en cuestión, el valor FetchType. Lazy indica que el campo se va a cargar de forma "perezosa". El valor FetchType.EAGER indica que el valor será cargado cuando se cargue el resto del objeto. El valor por defecto de la propiedad fetch es FetchType.EAGER.
La anotación @Lob indica que el contenido de un campo básico será guardado como LOB (Large OBject). Si por ejemplo utilizamos esta anotación para marcar un campo que contenta un String o caracteres el framework lo mapeará a una columna CLOB (Character Large OBject). Si es de otro tipo será mapeado a una columna de tipo BLOB (Binary Large OBject).
Referencia original: debugmodeon
0 comentarios:
Publicar un comentario
Expresate y se crítico en tu vida. XD