Java - Ayuda con Hibernate

 
Vista:
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Hibernate

Publicado por Leonardo (16 intervenciones) el 31/08/2016 03:33:27
Hola que tal!!! A ver si alguien me podría ayudar!

Tengo un problema con hibernate! Adjunte un ejemplo de lo que quiero mas o menos hacer. El problema es:

Tengo una entidad:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity(name = "Person")
public class Person implements Serializable {
 
     @Id
    @GeneratedValue
    private Long id;
 
    @OneToMany(cascade = {CascadeType.ALL})
    @JoinColumn(name = "pkPerson")
    private List<Phone> phones = new ArrayList<>();
 
    con contructores, getters y setters
}

y otra:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity(name = "Phone")
public class Phone implements Serializable {
 
    @Id
    @GeneratedValue
    private Long id;
 
    @NaturalId
    @Column(name = "`number`", unique = true)
    private String number;
 
    con contructores, getters y setters
 
}

Cuando quiero consultar una persona con su lista de phones el hibernate no me los toma!! Como debería hacer para que me devuelva la clase person con su lista de Phones.

En el rar esta el ejemplo completo.

Desde ya muchas gracias
Espero sus prontas respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con Hibernate

Publicado por Yovanni (1 intervención) el 31/08/2016 18:06:27
Agrega la relacion ManyToOne en la entidad Phone
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Hibernate

Publicado por Leonardo (16 intervenciones) el 01/09/2016 12:14:10
SI ya lo probe eso y sigue sin funcionar!!!! Tiene que ser un problema de configuración!! Pero no se cual es!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Hibernate

Publicado por Yovanni (2 intervenciones) el 01/09/2016 20:30:17
Podrias probar indicando el fetchType:
@OneToMany((fetch=FetchType.EAGER)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Hibernate

Publicado por Leonardo (16 intervenciones) el 02/09/2016 14:26:32
Muchas gracias Yovanni, ayer conteste pero no se porque no lo subió el mensaje!! Me funciono como vos dijiste!! Maldito fetch jejeje tanto tiempo y era tan fácil jeje, te lo agradezco mucho. Abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Hibernate

Publicado por Leonardo (16 intervenciones) el 02/09/2016 16:35:38
Ya que estoy molesto de nuevo! Tomemos el mismo ejemplo (Lo que quiero hacer no se si se puede) si yo le agrego un campo a la clase phone que sea activo, si se puede configurar por anotaciones que cuando busque a la persona con su lista de phone me aparezcan los que están activo = true automáticamente.
Desde ya muchas gracias!!
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Hibernate

Publicado por Yovanni (2 intervenciones) el 02/09/2016 18:21:18
Realmente no se si eso sea posible pero no lo veo conveniente.
Sobre el nuevo campo que quieres agregar, yo lo agregario como tipo ya sea int o String, ya que algunos gestores de BD no cuentan con el tipo de dato boleano igualmente en la bd agregarle el campo de tipo numerico o cadena. y tomar "0" como inactivo y "1" como activo
Sobre el filtro que quieres realizar lo que yo haria es armar esa consulta que tu quieres en una clase apropiada para realizar consultas y en ella realizar un metodo que reciba el estado como parametro y te retorne la lista de Person's en donde el estado del Phone sea igual al estado que tu le pases, podrias usar Criteria para eso y quedaria algo asi:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.praxis.siho.core.data.repository;
 
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
 
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.sql.JoinType;
import org.springframework.stereotype.Repository;
 
import com.praxis.siho.core.data.dto.HoAnalisisRiesgoDto;
import com.praxis.siho.core.data.entity.HoAnalisisRiesgo;
 
@Repository
public class PersonDao {
 
	@PersistenceContext(type = PersistenceContextType.TRANSACTION)
	private EntityManager entityManager;
 
	@SuppressWarnings("unchecked")
	public List<Person> findByPhoneEstado(String estado) {
 
		Session session = entityManager.unwrap(Session.class);
 
		Criteria criteria = session.createCriteria(Person.class, "person");
 
		criteria.createAlias("person.phone", "phone", JoinType.INNER_JOIN);
 
		if(estado != null && !estado.isEmpty()) {
 
			criteria.add(Restrictions.eq("phone.estado", estado));
		}
 
		criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
 
		return (List<Person>) criteria.list();
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Hibernate

Publicado por Leonardo (16 intervenciones) el 03/09/2016 00:16:13
Gracias Yovanni! Quería saber solo si existía la posibilidad de evitarme la consulta extra!! Quería solo saber si se podía hacer mas automatico, pero muchas gracias por las molestias!

Abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar