Como listar usando mapeamento Embeddable do Hibernate [Resolvido]

3 respostas
J

Bom dia!
Sou novo e esta é a prima dúvida que estou postando e não sei se estou no lugar certo e tenho a seguinte dúvida.
Como listar dados utilizando o @ElementCollection(fetch=FetchType.EAGER) e o @Embedded?
Pois ele está retornando endereço de memória.
Tenho as seguintes classes:

abaixo a classe UserDetails

@Entity 
@Table(name="UserDetails") 
public class UserDetails implements Serializable{ 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int userId; 
private String userName; 
@ElementCollection(fetch=FetchType.EAGER) 
@Embedded 
private Collection<Address> ListOfAddresses = new HashSet(); 

getters e setters...... 

}

abaixo a classe Address

@Embeddable 
@Table(name="Address") 
public class Address implements Serializable{ 
   @Column(name="Street_name") 
   private String street; 
   @Column(name="City_name") 
   private String city; 
   @Column(name="State_name") 
   private String state; 
   @Column(name="Pin_code") 
   private String pincode; 

 // getters e setters... 
}

abaixo a classe principal

public class HibernateTestListaDAO{ 

public static void main(String[] args){ 
   try 
   { 
       SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory(); 
       Session session = sessionFactory.openSession(); 
       session.beginTransaction(); 
       UserDetails useTeste = (UserDetails) session.get(UserDetails.class, 1); 
       String dados = useTeste.getUserName(); 

       Collection<Address> address = useTeste.getListOfAddresses(); 
       int q = address.size(); 

      Iterator it = address.iterator(); 
      String end = ""; 
      Collection<Address> en = address; 
      JOptionPane.showMessageDialog(null,"Teste en.: "+en); 
      for(int i = 0; i <q;i++) {
             end = end+"\nendereços "+(i+1)+".: "+it.next(); 
      } 
      JOptionPane.showMessageDialog(null,"Nome.: "+dados); 
   } 
   catch(Exception erro) 
   { 
        JOptionPane.showMessageDialog(null,"Erro ao listar.: "+erro); 
   } 
}

Mas ele somente mostra endereço de memória, mostrado abaixo:

Teste en.:[Address@b2b75c,Address@158e7bc]

3 Respostas

Rodrigo_Sasaki

por acaso sua classe Adress sobreescreve o método toString()? Porque se não, ele herdará o de Object, que imprime assim mesmo.

J

Na minha Classe Address, somente possui os getters e os setters conforme mostrado no código acima e se fosse esse o motivo que você citou como eu resolveria esse problema? Você pode me dar um exemplo de como essa classe ficaria.
Desde já agradeço o interresse em me ajudar!

J

Consegui fazer listar foi só colocar o método toString() como mostrado abaixo

@Embeddable   
@Table(name="Address")   
public class Address implements Serializable{   
   @Column(name="Street_name")   
   private String street;   
   @Column(name="City_name")   
   private String city;   
   @Column(name="State_name")   
   private String state;   
   @Column(name="Pin_code")   
   private String pincode;   
  
// getters e setters...
  
public String toString() {
        return city+pincode+state+street;
    } 
}

Obrigado pela dica digaoneves!!

Criado 14 de maio de 2012
Ultima resposta 18 de mai. de 2012
Respostas 3
Participantes 2