Ajuda com Hibernate

3 respostas
H

Olá pessoal…

Estou utilizando o VRaptor como framework da minha aplicação junto com o Hibernate…

Criei as classes que serão mapeadas pelo hibernate e usei o esquema de criação de tabelas do Hibernate…

Aí que mora o problema:

Entre minhas classes existem 3 em particular que estou com dificuldades:
      Usuario;
      Imovel;
      Telefone;

 Um usuário pode ter 'n' telefones, como também um imóvel pode ter 'n' telefones...
 Entre os outros atributos das classes Usuario e Imovel eu coloquei:
@OneToMany
	private List<Telefone> telefones;
E a classe Telefone eu  joguei as informações pertinentes a telefone como "código de área", "telefone", etc...

 Quando usei o Hibernate para criar as tabelas, ele me criou duas tabelas adicionais que não possuem classes relacionadas a elas, que são:
      "usuario_telefone"
      "imovel_telefone"

 Essas tabelas criadas pelo Hibernate possuem apenas dois códigos sendo um do telefone e outro da entidade em questão (Usuario ou Imovel).

  que quando vou, por exemplo, gravar um Imóvel ele [b]não[/b] grava o telefone.

 Tentei fazer ele gravar o telefone separado e beleza, consegui.  Mas o relacionamento entre a Entidade e o Telefone fica perdida...
 
 Tentei gravar além do telefone, este relacionamento também, jogando nessas tabelas intermediárias(imovel_telefone) o código da entidade e o código do telefone mas  um erro, o seguinte erro:

(apenas um trecho, que acredito ser o mais importante para entender)

09:00:31,531 DEBUG AST:266 - --- HQL AST ---
 \-[INSERT] 'insert'
    +-[INTO] 'into'
    |  +-[IDENT] 'imovel_telefone'
    |  \-[RANGE] 'column-spec'
    |     +-[IDENT] 'Imovel_id'
    |     \-[IDENT] 'telefones_id'
    \-[QUERY] 'query'
       \-[SELECT_FROM] 'SELECT_FROM'
          +-[FROM] '{filter-implied FROM}'
          \-[SELECT] 'select'
             \-[VECTOR_EXPR] '{vector}'
                +-[COLON] ':'
                |  \-[IDENT] 'entidade'
                \-[COLON] ':'
                   \-[IDENT] 'telId'

09:00:31,531 DEBUG ErrorCounter:68 - throwQueryException() : no errors
09:00:31,625 DEBUG HqlSqlBaseWalker:111 - insert << begin [level=1, statement=insert]
09:00:31,640 ERROR [vraptor2]:253 - Servlet.service() for servlet vraptor2 threw exception
org.hibernate.hql.ast.QuerySyntaxException: imovel_telefone is not mapped [insert into imovel_telefone (Imovel_id, telefones_id) select (:entidade, :telId) ]
	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	at org.hibernate.hql.ast.HqlSqlWalker.createIntoClause(HqlSqlWalker.java:941)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.intoClause(HqlSqlBaseWalker.java:839)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.insertStatement(HqlSqlBaseWalker.java:479)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:253)
Bem, alguém teria alguma idéia do que eu posso fazer nesse caso?

 Teria que fazer as instruções sql mesmo?  Ou teria que melhorar minha modelagem OO?

 Desde já sou grato pela ajuda!!!

3 Respostas

nicoweda

Faz assim.

Cria uma instancia do objeto Imovel, popula ele.
Cria uma instancia do objeto Telefone e popula ele também.
depois setta o telefone dentro do imovel e por fim salva os dois.

Pronto…

H

Fiz isso mas ele não grava na tabela “imovel_telefone”, aí perde-se o relacionamento entre essas entidades…

H

Deveria eu criar mais duas classes de nome “UsuarioTelefone” e “ImovelTelefone” pra colocar só os id’s das outras classes?

Criado 24 de agosto de 2007
Ultima resposta 24 de ago. de 2007
Respostas 3
Participantes 2