Mapeamento de classes com herança usando anotações Hibernate

Pessoal, estou desenvolvendo um projeto que possui herança de classes e preciso persistir os dados dessas classes no banco de dados, porém não sei a maneira correta de fazer isso.

Nesse projeto tenho 5 classes citadas a seguir:

Palavra, que é a super classe do projeto.
Substantivo, Artigo, Pronome e Verbo que herdam de palavra.

No banco de dados o que desejo é armazenar os dados de todas essas classes em uma única tabela chamada palavra, pois todos esses objetos são realmente palavras. Porém estudando um pouco o Hibernate vi que tenho que anotar as classes que desejo persistir com @Entity. Cada subclasse possui atributos específicos, por exemplo, a classe Verbo possui um atributo tempoVerbal, que no banco de dados desejo que torne-se uma coluna da tabela Palavra.

Aí vem minha dúvida, devo mapear todas as classes com @Entity ou apenas a classe Palavra?

Caso eu esteja pensando errado na modelagem das classes aceito sugestoes, rsrs.

Obrigado.

Bom dia Jovem…

Sim você deve colocar em todas as classe a anotação @Entity.

Para criar apenas uma tabela no banco ai vai da estrategia de herança que você vai utilizar.

@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@Inheritance(strategy= InheritanceType.JOINED)

nesse table per class ele ira criar no banco só a tabela referente a super classe.

Se você estiver começando agora com anotações “JPA”, indico dar uma olhada nessa apostila da K19 achei muito boa.

http://www.k19.com.br/downloads/apostilas/java/k19-k21-persistencia-com-jpa2-e-hibernate

[quote=pbjunior2]Bom dia Jovem…

Sim você deve colocar em todas as classe a anotação @Entity.

Para criar apenas uma tabela no banco ai vai da estrategia de herança que você vai utilizar.

@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@Inheritance(strategy= InheritanceType.JOINED)

nesse table per class ele ira criar no banco só a tabela referente a super classe.

Se você estiver começando agora com anotações “JPA”, indico dar uma olhada nessa apostila da K19 achei muito boa.

http://www.k19.com.br/downloads/apostilas/java/k19-k21-persistencia-com-jpa2-e-hibernate [/quote]

pbjunior2, pesquisei sobre essas estratégias e no meu caso o que desejo conseguirei com @Inheritance(strategy= InheritanceType.SINGLE_TABLE) .

Mas apenas um esclarecimento. Com a estratégia @Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) que você mencionou, o Hibernate NÃO criará no banco APENAS a superclasse, criando as demais, correto?

No meu caso, ele criaria as classes Substantivo, Artigo, VErbo e Pronome, com cada uma contendo os atributos de Palavra, certo?

Obrigado.

Sim isso msm, ele criara uma tabela para cada sub-classe e replicará em cada uma as informações da super-classe.
se não me engano é isso.

Bom tenho um exemplo bem simples aki referente as 3 estrategia …

vou te passar… ai você vê qual se encaixa melhor na sua situação.

eu acho legal adotar a estratégia SingleTable em casos onde não tem muitos atributos diferentes entre as classes filhas.
provavelmente, pelo case que você tá propondo, também me parece se encaixar nesse quadro.