Foros del Web » Programación para mayores de 30 ;) » Java »

La clase 'generator' en un mapeo con Hibernate

Estas en el tema de La clase 'generator' en un mapeo con Hibernate en el foro de Java en Foros del Web. Hola, Tengo un archivo de mapeo (A) donde la clase generator es "increment" y luego otro (B) con el cual hago una relación, pero aquí ...
  #1 (permalink)  
Antiguo 11/07/2011, 19:51
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
La clase 'generator' en un mapeo con Hibernate

Hola,

Tengo un archivo de mapeo (A) donde la clase generator es "increment" y luego otro (B) con el cual hago una relación, pero aquí no se que poner, si identity, foreign , assigned o qué?

¿qué se usa para una relación?

Saludos
  #2 (permalink)  
Antiguo 12/07/2011, 01:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

Puedes utlizar anotaciones(ejb) lo cual te facilitaria para hacer el mapeo y las relaciones
o en todo caso sino usas anoatciones peudes:

Código PHP:
Ver original
  1. <hibernate-mapping>
  2.     <class name="hibernate.relaciones.unomuchos.modelo.Persona" table="PERSONAS">
  3.         <id name="id" column="ID_PERSONA">
  4.             <generator class="identity" />
  5.         </id>  
  6.  
  7.         <property name="nombre" />  
  8.  
  9.         <list name="libros" cascade="all-delete-orphan">
  10.             <key column="ID_PERSONA" />
  11.             <index column="ORDEN" />
  12.             <one-to-many class="hibernate.relaciones.unomuchos.modelo.Libro" />
  13.         </list>  
  14.     </class>
  15. </hibernate-mapping>

Saludos
  #3 (permalink)  
Antiguo 12/07/2011, 03:32
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Gracias por la respuesta, lo tengo así como indicas pero el "list" que en mi caso es un "set" lo tengo declarado en la clase A que tiene como generator "increment"

¿en la clase B lo pongo como "assigned" o "identity"?
  #4 (permalink)  
Antiguo 12/07/2011, 04:36
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

El elemento "<generator>" es el que nos permite indicar la estrategia de generación del identificador usando su atributo "class". Existen varias estrategias que están explicadas en esta pagina http://www.roseindia.net/hibernate/h...relement.shtml

Saludos
  #5 (permalink)  
Antiguo 13/07/2011, 19:01
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Gracias por la respuesta.

La descripción de las estrategias en castellano las muestra Netbeans al pasar el ratón por encima del nombre de la clase, pero mi duda es que estrategia utilizar para la relación.

Para la clase A utilizo "increment", pero en la clase "B" no se cual utilizar.

Es en una relación one-to-many.

Saludos
  #6 (permalink)  
Antiguo 14/07/2011, 01:10
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

Puedes mostrar tu codigo?
  #7 (permalink)  
Antiguo 14/07/2011, 08:30
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Este es el mapeo de la tabla "A":

Cita:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 06-jul-2011 19:06:31 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="es.jsys.cdr.oracle.DetalleLlamadas" table="DETALLE_LLAMADAS" schema="myschema">
<id name="incidenciaid" type="integer">
<column name="INCIDENCIAID" precision="0" />
<generator class="increment" />
</id>

<set name="relaciones" table="RELACIONES">
<key column="ID" />
<one-to-many class="es.jsys.cdr.oracle.Relaciones"/>
</set>
Este es el mapeo de la tabla Relaciones , la "B":

Cita:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 06-jul-2011 19:06:31 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="es.jsys.cdr.oracle.Relaciones" table="RELACIONES" schema="myschema">
<id name="id" type="integer">
<column name="ID" precision="0" />
<generator class="identity" />
</id>
<property name="relacionada" type="integer" >
<column name="RELACIONADA" precision="0" />
</property>
</class>
</hibernate-mapping>
Saludos
  #8 (permalink)  
Antiguo 15/07/2011, 05:17
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

Mira esto con anotaciones, otra posibilidad, supongamos

La clase libro:

Código PHP:
Ver original
  1. @Entity
  2. public class Libro implements Serializable
  3. {
  4.     @Id
  5.     @GeneratedValue(strategy=GenerationType.IDENTITY)
  6.     private long id;
  7.     private String titulo;
  8.  
  9.     public Libro()
  10.     {
  11.     }
  12.  
  13.     public long getId()
  14.     {
  15.         return id;
  16.     }
  17.  
  18.     protected void setId(long id)
  19.     {
  20.         this.id = id;
  21.     }
  22.  
  23.     public String getTitulo()
  24.     {
  25.         return titulo;
  26.     }
  27.  
  28.     public void setTitulo(String titulo)
  29.     {
  30.         this.titulo = titulo;
  31.     }
  32. }

y la clase persona

Código PHP:
Ver original
  1. @Entity
  2. public class Persona implements Serializable
  3. {
  4.     @Id
  5.     @GeneratedValue(strategy=GenerationType.IDENTITY)
  6.     private long id;
  7.     private String nombre;
  8.  
  9.     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
  10.     private List&ltLibro> libros = new ArrayList<Libro>();
  11.  
  12.     public Persona()
  13.     {
  14.     }
  15.  
  16.     public long getId()
  17.     {
  18.         return id;
  19.     }
  20.  
  21.     protected void setId(long id)
  22.     {
  23.         this.id = id;
  24.     }
  25.  
  26.     public String getNombre()
  27.     {
  28.         return nombre;
  29.     }
  30.  
  31.     public void setNombre(String nombre)
  32.     {
  33.         this.nombre = nombre;
  34.     }
  35.  
  36.     public List getLibros()
  37.     {
  38.         return libros;
  39.     }
  40.  
  41.     public void setLibros(List libros)
  42.     {
  43.         this.libros = libros;
  44.     }
  45.  
  46.     public void addLibro(Libro libro)
  47.     {
  48.         this.libros.add(libro);
  49.     }
  50. }

Con esas anotaciones te ahorras todo el papeleo del mapeo xD
Esto es para uno a muchos unidireccional

Saludos
  #9 (permalink)  
Antiguo 15/07/2011, 14:17
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Gracias por la respuesta,

Voy a hacerlo con anotaciones a ver..

Una cosa, voy a borrar los mappings files y los POJOS para volver a crearlos con la opción de ingeniería inversa y seleccionando la casilla de EJB para que me cree las anotaciones, lo que ocurre que ya tenía consultas criteria hechas, sin estas nuevas anotaciones, ¿por lo qué también selecciono la casilla de Mapas XML de Hibernate?

Para que me cree lo mismo que tenía antes más las anotaciones, ¿es así no?

Saludos

Última edición por javihd; 15/07/2011 a las 14:22
  #10 (permalink)  
Antiguo 15/07/2011, 14:31
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Bueno ahora me ha quedado así:


Cita:
// Generated 15-jul-2011 21:19:19 by Hibernate Tools 3.2.1.GA


import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
* DetalleLlamadas generated by hbm2java
*/
@Entity
@Table(name="DETALLE_LLAMADAS"
,schema="SCHEMA"
)
public class DetalleLlamadas implements java.io.Serializable {


private Integer incidenciaid;
private String origen;
private String destino;
private String contextoDestino;
private String clid;
private String canal;
private String lastapp;
private Date inicio;
private Date fin;
private String disposicion;
private String amaflags;
private String canalDestino;
private String comentarios;
private String calle;
private String numCalle;
private String titulo;
private String estado;
private Date incidenciaInicio;
private Date incidenciaFin;
private String grabacion;
private String agenteFinaliza;

public DetalleLlamadas() {
}


public DetalleLlamadas(Integer incidenciaid) {
this.incidenciaid = incidenciaid;
}
public DetalleLlamadas(Integer incidenciaid, String origen, String destino, String contextoDestino, String clid, String canal, String lastapp, Date inicio, Date fin, String disposicion, String amaflags, String canalDestino, String comentarios, String calle, String numCalle, String titulo, String estado, Date incidenciaInicio, Date incidenciaFin, String grabacion, String agenteFinaliza) {
this.incidenciaid = incidenciaid;
this.origen = origen;
this.destino = destino;
this.contextoDestino = contextoDestino;
this.clid = clid;
this.canal = canal;
this.lastapp = lastapp;
this.inicio = inicio;
this.fin = fin;
this.disposicion = disposicion;
this.amaflags = amaflags;
this.canalDestino = canalDestino;
this.comentarios = comentarios;
this.calle = calle;
this.numCalle = numCalle;
this.titulo = titulo;
this.estado = estado;
this.incidenciaInicio = incidenciaInicio;
this.incidenciaFin = incidenciaFin;
this.grabacion = grabacion;
this.agenteFinaliza = agenteFinaliza;
}

@Id

@Column(name="INCIDENCIAID", unique=true, nullable=false, precision=0)
public Integer getIncidenciaid() {
return this.incidenciaid;
}

public void setIncidenciaid(Integer incidenciaid) {
this.incidenciaid = incidenciaid;
}

@Column(name="ORIGEN", length=10)
public String getOrigen() {
return this.origen;
}

public void setOrigen(String origen) {
this.origen = origen;
}

@Column(name="DESTINO", length=20)
public String getDestino() {
return this.destino;
}

public void setDestino(String destino) {
this.destino = destino;
}

@Column(name="CONTEXTO_DESTINO", length=20)
public String getContextoDestino() {
return this.contextoDestino;
}

public void setContextoDestino(String contextoDestino) {
this.contextoDestino = contextoDestino;
}

@Column(name="CLID", length=80)
public String getClid() {
return this.clid;
}

public void setClid(String clid) {
this.clid = clid;
}

@Column(name="CANAL", length=80)
public String getCanal() {
return this.canal;
}

public void setCanal(String canal) {
this.canal = canal;
}

@Column(name="LASTAPP", length=80)
public String getLastapp() {
return this.lastapp;
}

public void setLastapp(String lastapp) {
this.lastapp = lastapp;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="INICIO", length=11)
public Date getInicio() {
return this.inicio;
}

public void setInicio(Date inicio) {
this.inicio = inicio;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="FIN", length=11)
public Date getFin() {
return this.fin;
}

public void setFin(Date fin) {
this.fin = fin;
}

@Column(name="DISPOSICION", length=32)
public String getDisposicion() {
return this.disposicion;
}

public void setDisposicion(String disposicion) {
this.disposicion = disposicion;
}

@Column(name="AMAFLAGS", length=32)
public String getAmaflags() {
return this.amaflags;
}

public void setAmaflags(String amaflags) {
this.amaflags = amaflags;
}

@Column(name="CANAL_DESTINO", length=32)
public String getCanalDestino() {
return this.canalDestino;
}

public void setCanalDestino(String canalDestino) {
this.canalDestino = canalDestino;
}

@Column(name="COMENTARIOS", length=4000)
public String getComentarios() {
return this.comentarios;
}

public void setComentarios(String comentarios) {
this.comentarios = comentarios;
}

@Column(name="CALLE", length=60)
public String getCalle() {
return this.calle;
}

public void setCalle(String calle) {
this.calle = calle;
}

@Column(name="NUM_CALLE", length=10)
public String getNumCalle() {
return this.numCalle;
}

public void setNumCalle(String numCalle) {
this.numCalle = numCalle;
}

@Column(name="TITULO", length=150)
public String getTitulo() {
return this.titulo;
}

public void setTitulo(String titulo) {
this.titulo = titulo;
}

@Column(name="ESTADO", length=13)
public String getEstado() {
return this.estado;
}

public void setEstado(String estado) {
this.estado = estado;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="INCIDENCIA_INICIO", length=11)
public Date getIncidenciaInicio() {
return this.incidenciaInicio;
}

public void setIncidenciaInicio(Date incidenciaInicio) {
this.incidenciaInicio = incidenciaInicio;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="INCIDENCIA_FIN", length=11)
public Date getIncidenciaFin() {
return this.incidenciaFin;
}

public void setIncidenciaFin(Date incidenciaFin) {
this.incidenciaFin = incidenciaFin;
}

@Column(name="GRABACION", length=20)
public String getGrabacion() {
return this.grabacion;
}

public void setGrabacion(String grabacion) {
this.grabacion = grabacion;
}

@Column(name="AGENTE_FINALIZA", length=15)
public String getAgenteFinaliza() {
return this.agenteFinaliza;
}

public void setAgenteFinaliza(String agenteFinaliza) {
this.agenteFinaliza = agenteFinaliza;
}




}
Ese sería el objeto "A", ahora tengo otro objeto el "B" donde tengo 2 campos ID y RELACIONADAS, lo que necesito ahora es meter los ID de las incidencias que el usuario relacione en el campo RELACIONADAS.

Cita:
// Generated 15-jul-2011 21:19:19 by Hibernate Tools 3.2.1.GA


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
* Relaciones generated by hbm2java
*/
@Entity
@Table(name="RELACIONES"
,schema="SCHEMA"
)
public class Relaciones implements java.io.Serializable {


private Integer id;
private Integer relacionada;

public Relaciones() {
}


public Relaciones(Integer id) {
this.id = id;
}
public Relaciones(Integer id, Integer relacionada) {
this.id = id;
this.relacionada = relacionada;
}

@Id

@Column(name="ID", unique=true, nullable=false, precision=0)
public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

@Column(name="RELACIONADA", precision=0)
public Integer getRelacionada() {
return this.relacionada;
}

public void setRelacionada(Integer relacionada) {
this.relacionada = relacionada;
}



}
  #11 (permalink)  
Antiguo 15/07/2011, 14:38
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Perdona por mi ignorancia, ¿pero ahora dónde añado el one-to-many, en el hbm.xml como antes, o en estos archivos .java (las anotaciones-POJOS o como se llamen porque ya me confunden) o es indiferente en un sitio que en el otro?
  #12 (permalink)  
Antiguo 18/07/2011, 01:46
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

No, si usas anotaciones, ya no escribes esto one-to-many, en el hbm.xml sino pasaria:

public class Relaciones implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<DetalleLlamadas> relacionada= new ArrayList<DetalleLlamadas >();

y siemrpe la anotacion al tienes que poens antes de declarar, de la forma que te indico arriba

PD: es decir, los .hbm.xml ya no lo tienes que hacer, el mapeo ya lo hacen las anotacioens de ejb
solo tendras que tener el cfg.xml para realizar la conexion a la bbdd

Saludos

Última edición por sirdaiz; 18/07/2011 a las 02:14
  #13 (permalink)  
Antiguo 18/07/2011, 04:46
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: La clase 'generator' en un mapeo con Hibernate

Gracias sidaiz me ha sido de mucha ayuda.

Saludos
  #14 (permalink)  
Antiguo 18/07/2011, 05:08
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: La clase 'generator' en un mapeo con Hibernate

De nada, yo tampoco estoy muy puesto en esto de hibernate, si te dijera q yo tb estoy aprendiendo xD

Saludos

Última edición por sirdaiz; 18/07/2011 a las 05:13

Etiquetas: clase, generator, hibernate, mapeo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:45.