unidades:04_claves_primarias_y_tipos_datos:01_tipos_basicos
Diferencias
Muestra las diferencias entre dos versiones de la página.
Revisión previa | |||
— | unidades:04_claves_primarias_y_tipos_datos:01_tipos_basicos [2023/04/07 22:16] (actual) – admin | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Tipos básicos ====== | ||
+ | Al mapear una propiedad de una clase Java a una columna de base de datos podemos especificar el tipo. Ésto es posible ya que algunos tipos de Java pueden mapearse de distintas formas en la base de datos. Por ello Hibernate permite especificar un tipo más concreto para cada propiedad Java. | ||
+ | ===== Tipos en Hibernate ===== | ||
+ | La lista de los tipos más usados en Hibernate es la siguiente(( En el apartado de referencias podremos encontrar el listado completo de tipos de Hibernate. )): | ||
+ | |||
+ | ^ Tipo Hibernate | ||
+ | | integer | int , <javadoc jdk7> | ||
+ | | long | long, <javadoc jdk7> | ||
+ | | short | short , <javadoc jdk7> | ||
+ | | float | float , <javadoc jdk7> | ||
+ | | double | double , <javadoc jdk7> | ||
+ | | character | char , <javadoc jdk7> | ||
+ | | byte | byte , <javadoc jdk7> | ||
+ | | boolean | boolean , <javadoc jdk7> | ||
+ | | yes_no | boolean , <javadoc jdk7> | ||
+ | | true_false | boolean , <javadoc jdk7> | ||
+ | | string | <javadoc jdk7> | ||
+ | | date | <javadoc jdk7> | ||
+ | | time | <javadoc jdk7> | ||
+ | | timestamp | <javadoc jdk7> | ||
+ | | text | <javadoc jdk7> | ||
+ | | binary | byte[] | TINYBLOB | | ||
+ | | big_decimal | <javadoc jdk7> | ||
+ | | big_integer | <javadoc jdk7> | ||
+ | |||
+ | Como podemos ver , los tipos Java <javadoc jdk7> | ||
+ | ==== Fecha y hora ==== | ||
+ | En java se suele cometer el error de pensar que la clase <javadoc jdk7> | ||
+ | |||
+ | La forma entonces de guardar únicamente la fecha o únicamente la hora o ambas cosas usando hibernate es especificar los tipos '' | ||
+ | |||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | |||
+ | <note tip> | ||
+ | ==== Boolean ==== | ||
+ | Hibernate permite 3 formas distintas de almacenar un booleano de Java en la base de datos. Para ello existen 3 tipos de datos en hibernate. | ||
+ | |||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | ==== Texto ==== | ||
+ | Hibernate permite 2 formas distintas de almacenar un <javadoc jdk7> | ||
+ | |||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | ===== Clases Java ===== | ||
+ | Ahora que tenemos claro qué tipo de dato de Hibernate debemos usar para cada propiedad de Java, pasemos a explicar cómo se debe indicar dicho tipo de datos. | ||
+ | |||
+ | Para explicarlo usaremos el siguiente código Java. | ||
+ | |||
+ | <code java 1|Clase TiposBasicos > | ||
+ | public class TiposBasicos implements Serializable | ||
+ | private int inte; | ||
+ | private long long1; | ||
+ | private short short1; | ||
+ | private float float1; | ||
+ | private double double1; | ||
+ | private char character1; | ||
+ | private byte byte1; | ||
+ | private boolean boolean1; | ||
+ | private boolean yesno1; | ||
+ | private boolean truefalse1; | ||
+ | private String stri; | ||
+ | private Date dateDate; | ||
+ | private Date dateTime; | ||
+ | private Date dateTimestamp; | ||
+ | private String texto; | ||
+ | private byte[] binario; | ||
+ | private BigDecimal bigDecimal; | ||
+ | private BigInteger bigInteger; | ||
+ | |||
+ | public TiposBasicos() { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | El siguiente diagrama UML muestra la clase TiposBasicos: | ||
+ | |||
+ | <uml> | ||
+ | class TiposBasicos | ||
+ | TiposBasicos : int inte | ||
+ | TiposBasicos : long long1 | ||
+ | TiposBasicos : short short1 | ||
+ | TiposBasicos : float float1 | ||
+ | TiposBasicos : double double1 | ||
+ | TiposBasicos : char character1 | ||
+ | TiposBasicos : byte byte1 | ||
+ | TiposBasicos : boolean boolean1 | ||
+ | TiposBasicos : boolean yesno1 | ||
+ | TiposBasicos : boolean truefalse1 | ||
+ | TiposBasicos : String stri | ||
+ | TiposBasicos : Date dateDate | ||
+ | TiposBasicos : Date dateTime | ||
+ | TiposBasicos : Date dateTimestamp | ||
+ | TiposBasicos : String texto | ||
+ | TiposBasicos : byte[] binario | ||
+ | TiposBasicos : BigDecimal bigDecimal | ||
+ | TiposBasicos : BigInteger bigInteger | ||
+ | </ | ||
+ | |||
+ | Para las propiedades Java que tienen más de una forma de guardarse en la base de datos vamos a indicar el tipo concreto de hibernate que se va a usar: | ||
+ | |||
+ | ^ Propiedad Java ^ Tipo Hibernate ^ | ||
+ | | dateDate | date | | ||
+ | | dateTime | time | | ||
+ | | dateDateTime | timestamp | ||
+ | | booleanSimple | boolean | | ||
+ | | booleanYesno | yes_no | | ||
+ | | booleanTruefalse | true_false | | ||
+ | | stri | string | | ||
+ | | stringClob | text | | ||
+ | |||
+ | |||
+ | ===== Tablas ===== | ||
+ | La tabla de base de datos quedarían de la siguiente forma: | ||
+ | |||
+ | <uml> | ||
+ | class TiposBasicos << | ||
+ | TiposBasicos : INTEGER inte | ||
+ | TiposBasicos : BIGINT long1 | ||
+ | TiposBasicos : SMALLINT short1 | ||
+ | TiposBasicos : FLOAT float1 | ||
+ | TiposBasicos : DOUBLE double1 | ||
+ | TiposBasicos : CHAR[1] character1 | ||
+ | TiposBasicos : TINYINT byte1 | ||
+ | TiposBasicos : TINYINT boolean1 | ||
+ | TiposBasicos : CHAR[1] yesno1 | ||
+ | TiposBasicos : CHAR[1] truefalse1 | ||
+ | TiposBasicos : VARCHAR[255] stri | ||
+ | TiposBasicos : DATE dateDate | ||
+ | TiposBasicos : TIME dateTime | ||
+ | TiposBasicos : DATETIME dateTimestamp | ||
+ | TiposBasicos : LONGTEXT texto | ||
+ | TiposBasicos : TINYBLOB binario | ||
+ | TiposBasicos : DECIMAL bigDecimal | ||
+ | TiposBasicos : DECIMAL bigInteger | ||
+ | </ | ||
+ | ===== Fichero de mapeo '' | ||
+ | Para persistir la clase es necesario el fichero de persistencia: | ||
+ | * TiposBasicos.hbm.xml | ||
+ | |||
+ | |||
+ | <code xml 1| TiposBasicos.hbm.xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | < | ||
+ | <class name=" | ||
+ | <id name=" | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Podemos ver cómo cada propiedad Java se almacenará en la base de datos según el tipo de Hibernate que le hemos definido. | ||
+ | |||
+ | El atributo '' | ||
+ | |||
+ | <note tip> | ||
+ | Al definir que una propiedad Java es la clave primaria mediante el tag ''< | ||
+ | <code xml> | ||
+ | <id name=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <note tip>No es necesario indicar el tipo de las propiedades Java que tienen una única correspondencia con los tipos de hibernate o si él ya elige la correcta por defecto. Es decir no hace falta indicar el tipo para las propiedaes '' | ||
+ | ===== Anotaciones ===== | ||
+ | Como ya hemos visto es posible prescindir del fichero '' | ||
+ | |||
+ | El código fuente de la clase '' | ||
+ | |||
+ | <code java 1> | ||
+ | @Entity | ||
+ | @Table(name=" | ||
+ | public class TiposBasicos implements Serializable { | ||
+ | |||
+ | @Id | ||
+ | @Type(type=" | ||
+ | private int inte; | ||
+ | @Type(type=" | ||
+ | private long long1; | ||
+ | @Type(type=" | ||
+ | private short short1; | ||
+ | @Type(type=" | ||
+ | private float float1; | ||
+ | @Type(type=" | ||
+ | private double double1; | ||
+ | @Type(type=" | ||
+ | private char character1; | ||
+ | @Type(type=" | ||
+ | private byte byte1; | ||
+ | @Type(type=" | ||
+ | private boolean boolean1; | ||
+ | @Type(type=" | ||
+ | private boolean yesno1; | ||
+ | @Type(type=" | ||
+ | private boolean truefalse1; | ||
+ | @Type(type=" | ||
+ | private String stri; | ||
+ | @Temporal(TemporalType.DATE) | ||
+ | private Date dateDate; | ||
+ | @Temporal(TemporalType.TIME) | ||
+ | private Date dateTime; | ||
+ | @Temporal(TemporalType.TIMESTAMP) | ||
+ | private Date dateTimestamp; | ||
+ | @Lob | ||
+ | private String texto; | ||
+ | @Type(type=" | ||
+ | private byte[] binario; | ||
+ | @Type(type=" | ||
+ | private BigDecimal bigDecimal; | ||
+ | @Type(type=" | ||
+ | private BigInteger bigInteger; | ||
+ | |||
+ | |||
+ | public TiposBasicos() { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vemos como sobre cada una de las propiedades Java añadimos las anotaciones para indicar su tipo. Indicar que se han usado notaciones estándar de JPA y propietarias de Hibernate. | ||
+ | |||
+ | Veamos ahora el significado de cada una de las anotaciones: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **type**: Este atributo contiene el tipo concreto de Hibernate. Sus posibles valores se han indicado en la tabla del principio de este tema. | ||
+ | |||
+ | |||
+ | Como podemos ver el estándar de JPA no soporta los tipos de hibernate '' | ||
+ | |||
+ | <note tip>Como en el caso de del fichero de mapeo '' | ||
+ | ===== Código Java ===== | ||
+ | Ahora que ya tenemos preparada la clase Java para que pueda persistirse veamos el código necesario para persistirla. | ||
+ | |||
+ | <code java 1> | ||
+ | Date date=new Date(); | ||
+ | byte array[]={(byte)0x45, | ||
+ | |||
+ | TiposBasicos tiposBasicos1=new TiposBasicos(); | ||
+ | tiposBasicos1.setInte(1); | ||
+ | tiposBasicos1.setLong1(12); | ||
+ | tiposBasicos1.setShort1((short)13); | ||
+ | tiposBasicos1.setFloat1(14.1F); | ||
+ | tiposBasicos1.setDouble1(15.2); | ||
+ | tiposBasicos1.setCharacter1(' | ||
+ | tiposBasicos1.setByte1((byte)16); | ||
+ | tiposBasicos1.setBoolean1(true); | ||
+ | tiposBasicos1.setYesno1(true); | ||
+ | tiposBasicos1.setTruefalse1(true); | ||
+ | tiposBasicos1.setStri(" | ||
+ | tiposBasicos1.setDateDate(date); | ||
+ | tiposBasicos1.setDateTime(date); | ||
+ | tiposBasicos1.setDateTimestamp(date); | ||
+ | tiposBasicos1.setTexto(" | ||
+ | tiposBasicos1.setBinario(array); | ||
+ | tiposBasicos1.setBigDecimal(new BigDecimal(" | ||
+ | tiposBasicos1.setBigInteger(new BigInteger(" | ||
+ | |||
+ | TiposBasicos tiposBasicos2=new TiposBasicos(); | ||
+ | tiposBasicos2.setInte(2); | ||
+ | tiposBasicos2.setLong1(12); | ||
+ | tiposBasicos2.setShort1((short)13); | ||
+ | tiposBasicos2.setFloat1(14.1F); | ||
+ | tiposBasicos2.setDouble1(15.2); | ||
+ | tiposBasicos2.setCharacter1(' | ||
+ | tiposBasicos2.setByte1((byte)16); | ||
+ | tiposBasicos2.setBoolean1(false); | ||
+ | tiposBasicos2.setYesno1(false); | ||
+ | tiposBasicos2.setTruefalse1(false); | ||
+ | tiposBasicos2.setStri(" | ||
+ | tiposBasicos2.setDateDate(date); | ||
+ | tiposBasicos2.setDateTime(date); | ||
+ | tiposBasicos2.setDateTimestamp(date); | ||
+ | tiposBasicos2.setTexto(" | ||
+ | tiposBasicos2.setBinario(array); | ||
+ | tiposBasicos2.setBigDecimal(new BigDecimal(" | ||
+ | tiposBasicos2.setBigInteger(new BigInteger(" | ||
+ | |||
+ | Session session = sessionFactory.openSession(); | ||
+ | session.beginTransaction(); | ||
+ | |||
+ | session.save(tiposBasicos1); | ||
+ | session.save(tiposBasicos2); | ||
+ | |||
+ | session.getTransaction().commit(); | ||
+ | session.close(); | ||
+ | </ | ||
+ | |||
+ | En las líneas de 12 a 14 y 32 a 34 se guardan booleanos pero al tener distinto tipo de hibernate en la base de datos se guardará distinta información para cada uno de los 3 tipos. Por ello se guardan también 2 objetos '' | ||
+ | |||
+ | En las líneas de 16 a 18 y 36 a 38 se guarda el mismo objeto '' | ||
+ | ===== Referencias ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// |