entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Hibernate - Arrastrar clases como parámetro

Tengo una duda con respecto de usar una clase como parámetro en Hibernate.
Hasta ahora yo estaba usando una relación @OneToOne por que cada clase tiene un CRUD.

@Entity
public class A implements Serializable {    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idA;
    //------------------------
        public Long getIdA() {
        return idA;
    }
}
@Entity
public class B implements Serializable {    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idB;   
    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private A a;
        //------------------------
        public A getA() {
        return a;
    }
}
@Entity
public class C implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idC;   
    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private B b;
        //------------------------
        public B getB() {
        return b;
    }
}

Supongamos que estoy trabajado con la C. Si yo deseo acceder al parámetro de la clase A tengo que hacer esto:

getB().getA().getIdA():

¿Esta bien implementada? ¿O debo realizar otro tipo de relación?

1 Respuesta

3votos

GusGarsaky Puntos5480

Estás en lo correcto. Es una cadena y deberías primero obtener a B y luego a A para obtener sus atributos.

No olvides especificar en tus relaciones quién es el dueño de la relación en caso esta sea bidireccional (en tu caso no es necesario porque es unidireccional y el proveedor de persistencia entiende que la clase en donde se declara la relación es la dueña):

Mapeo bidireccional

// clase A
@OneToOne
private B b;

// clase B
@OneToOne(mappedBy = "b")
private A a;

Respecto a la forma en que has mapeado la carga de las relaciones está correcto. Es mejor hacer que sean LAZY para que se recuperen bajo demanda en lugar de recuperar B y A en el momento en que se cargue C, aunque esto depende enteramente de la lógica de negocio.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta