Como melhorar essa implementação JSF?

3 respostas
Woyzeck

Olá pessoal,

Tô criando uma aplicação trivial JSF.

Contém Pergunta e Categoria da Pergunta.

A minha dúvida é a seguinte:

Ao persistir uma pergunta preciso persistir a informação da categoria da pergunta.

Então criei um campo categoria_Id.

Porém no minha classe Pergunta do negócio. Bussiness Object

Crei um atributo Integer categoria_Id; que armazena o que vem do backing bean e persiste via hbm do hibernate.

Mas percebi que a classe Pergunta já não tem mais uma associação com Categoria, e sim um atributo inteiro.

Ficou meio estranho isso pra mim em termos de OO.

Gostaria de uma sugestão de vocês. Alguém implementou isso diferente?

3 Respostas

gleise

Oi,

Bom, eu geralmente faço assim:

Na classe Pergunta:

/*
 * @hibernate.one-to-one  
 *  class = "meupacote.Categoria"
 */
 private Categoria categoria;

Mas isso é um exemplo de um-pra-um, nos idos do hibernate 2. :smiley:

Depende muito do que você quer fazer, qual será a visibilidade de um objeto para com outro.

Tem como você postar alguns trechos de código e explicar melhor o que pretendes ?

Woyzeck

Quando faz essa anotação.

Como fica a relação entre as tabelas Pergunta e Categoria no banco de dados?

É uma página simples que estou tentando gravar os dados.

Tem a descrição da pergunta e um listbox com as categorias.

Acho que não teria a necessidade de ter uma relação entre Categoria e Pergunta teria?

gleise

Então, como o banco de dados é relacional é necessário ter a relação entre Categoria e Pergunta.

Como tem um listbox com as categorias, imagino que a relação é de que uma categoria pode ter várias perguntas. Assim, a tabela pergunta deve ter uma chave estrangeira que identifica a categoria a que pertence. Por isso, no banco de dados, precisamos do campo categoria_id na tabela pergunta.

Isso não quer dizer que na classe Pergunta esse atributo deva existir. Você pode indicá-lo somente no mapeamento (Pergunta.hbm) :

<many-to-one
            name="categoria"
            class="meupacote.Categoria"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="categoria_id"
        />

Na classe Pergunta teríamos:

/* 
   * @hibernate.many-to-one
   *  class = "meupacote.Categoria" 
   */  
   private Categoria categoria;

Espero ter ajudado. Boa sorte. :smiley:

Criado 9 de novembro de 2007
Ultima resposta 10 de nov. de 2007
Respostas 3
Participantes 2