Estou desenvolvendo minha primeira aplicação em java, aplicação desktop com Netbeans e hibernate.
Tenho as tabelas membros e estadocivil. O membro possui um estadocivol. Mapeei as classes utilizando o Hibernate e na classe Membros ele criou o atributo EstadoCivil. Meu select no hibernate é “from membros mb join mb.EstadoCivil”. Meu problema é que está sendo retornada uma lista de objetos, e não de membros, e não consigo recuperar os dados. Minha pergunda é como retornar uma lista de Membros ou converter o object em Membros? Segue abaixo o códogo:
publicList<Membros>Select(){List<Membros>lista=newArrayList<Membros>();try{this.sessao=Sessao.getSessao();transacao=sessao.beginTransaction();query=sessao.createQuery("from Membros");lista=query.list();sessao.close();}catch(HibernateExceptione){JOptionPane.showMessageDialog(null,"Erro ao realizar consulta!\n"+e.getMessage(),null,JOptionPane.ERROR_MESSAGE);}returnlista;}
Como você está fazendo um join, isso não vai retornar uma lista de Membro e sim uma lista de Object[], onde cada elemento do array correponderá à uma coluna do registro retornado.
C
Celso_Rivera
Mas existe algum meio de transformar em uma lista de Membros?
mrb0305
Tenta alterar a query para from Membros mb LEFT OUTER join mb.EstadoCivil EstadoCivil
E o list :
lista = (List<Membros>) query.list();
staroski
Não faz sentido, pois como você fez um join, você também estará trazendo valores de outra tabela, em quais atributos de Membro você vai setar os atributos que são exclusivos de EstadoCivil?
É por isso que o hibernate te traz um array com os valores, pois nessa caso não existe uma entidade para mapear estes resultados.
Acho que o mais fácil seria criar uma entidade para este relacionamento, uma classe MembroEstadoCivil por exemplo, e nela mapear o Membro e o EstadoCivil.
C
Celso_Rivera
Quando fiz o mapeamento, através de engenharia reversa, ele criou um atributo estado civil em membros, então achei que com join ele popularia este atributo, mas pelo que estou vendo ele não faz isso.
C
Celso_Rivera
Tentei o código acima mas continua retornando uma lista de objetos. Na verdade retorna um array bidimensional, o primeiro nível é object[], no segundo nível tem a classe membros e a estadoCivil, mas não sei como percorrer o array para pegar os dados, Preciso popular uma tela com estes dados. Se alguém souber como percorro o array para extrair os dados já ajudaria muito. Obrigado.
mrb0305
Por favor tem como colocar a classe mapeada aqui
C
Celso_Rivera
Segue a classe e o arquivo de mapeamento. Lembrando que gerei a classe através de engenharia reversa.
public class Membros implements java.io.Serializable {