Bienvenidos a Nuestro Mundo - A Proyectos Beta!

En nuestra vida, desde que nacemos todo lo probamos, ensayamos y testeamos; así también erramos, caemos pero por sobre todo aprendemos. Es decir, todo lo que hacemos forma parte de una nueva experiencia, de un PROYECTO. El que siempre exista la posibilidad de mejorarlo es lo que lo convierte en BETA. En este blog queremos compartir contenidos de tipo informático con artículos de programación, software libre y propietario, redes, base de datos, noticias, experiencias, etc... y también de humor. Es un sitio de todos y para todos. Participá! Sos importante ...

Entidades en JPA


Estoy empezando con JPA de java y encontré en debugmodeon una excelente explicación sobre las entidades en JPA. Quiero aclarar que lo que voy a poner no fue creado por mí sino que lo copie del sitio anteriormente mencionado.

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

Recibir Artículos Por Correo

Categorías

acertijos (1) adsense (1) adwords (1) AJAX (1) algoritmos (8) android (32) apple (5) autocad (1) base de datos (16) bash (1) becas (1) benchmark (1) blogger (2) blogs (27) bsd (1) buscadores (22) c# (1) CAD (1) camaras digitales (1) casting (1) CentOS (9) certificados (1) ciencia (1) CLEI (5) cloud computing (3) codigo fuente (9) Compiladores (4) Concursos (14) conferencias (24) congresos (6) consolas (7) criptografia (1) css (6) curso online (10) cursos (14) debian (50) Diseño (11) edicion video (7) emuladores (3) encuestas (2) entrevistas (9) ERTIC (1) etico (1) eventos (87) extjs (2) facebook (18) flash (2) flicker (1) FLISOL (13) geek (6) geoserver (2) GIMP (8) gis (29) Google (48) hacking (1) Hardware (30) haskell (3) HTML 5 (20) humor (261) imagenes (238) Ingenieria (14) internet (1) iphone (3) Java (42) Javascript (14) JQuery (3) juegos (36) libros (5) Linux (248) MAC (1) manga (2) Manuales (10) mapquest (1) MapServer (5) matematica (2) Microsoft (26) Microsoft Windows (27) Moviles (16) musicas (7) mysql (3) navegadores (41) newsletters (1) nokia (2) Noticias cientificas (7) Noticias Informaticas (39) Noticias varias (14) nube (1) openlayers (13) openstreetmap (10) opiniones (1) oracle (9) Paraguay (102) photoshop (1) Php (12) podcast (1) postgres (7) Programacion (135) prolog (1) proyectos (10) python (3) radio (6) Recursos (112) redes (10) Redes Sociales (62) resumenes (1) Revistas (57) ruby (2) seguridad (23) seminarios (6) sencha (2) SEO (3) Series (1) Silverlight (1) Sistema Operativo (27) smartphone (1) Software Libre (198) sun (2) tablet (19) tecnologia (24) tecnoPyensis (6) Testing (5) Trabajo (6) trucos (22) Twitter (29) Ubuntu (152) varios (113) videos (173) virtualizacion (14) visual basic net (2) web (86) wikipedia (1) Windows 7 (23) windows 8 (1) Windows XP (2) wordpress (5) xml (1)

Entradas Aleatorias

Seguidores

Últimos Comentarios

Archivos del Blog