… e tenho apenas uma tabela no meu BD chamada tbl_usuario. Meu objetivo é fazer com que instancias de todas essas classes sejam armazenadas nesta tabela. Adoteti essa estratégia.
Queria pedi-los para não julgarem se é a melhor ou pior estrategia. Trata-se apenas de um exemplo didático.
Como faço pra mapear essas entidades com Annotations?
Ai vai um exemplo…eu nao uso esse caso, eu uso tabela separada, mas o que você precisa dar uma pesquisada mesmo é sobre “@Inheritance(strategy=InheritanceType.SINGLE_TABLE)”…
flw…
vinny767
Blz, cara!
E as classes filhas?
Precisa de alguma anotação? Ou anotando a classe mãe o resto fica automático?
Valeu!
filipenf
quando é SINGLE_TABLE, é necessário informar uma coluna que será considerada o tipo ( por exemplo Usuario=‘U’, Fornecedor=‘F’, etc… ) e em cada classe filha tem que mapear isso também. Dá uma olhada na documentação do hibernate.org que exemplifica isso tudo lá.
T
Thiago_Domingues
meu modelo…
@Entity(name="cliente")@Inheritance(strategy=InheritanceType.JOINED)@SequenceGenerator(name="sq_cliente",sequenceName="sq_cliente")publicclassClienteimplementsjava.io.Serializable{@Id@GeneratedValue(strategy=GenerationType.AUTO,generator="sq_cliente")privateLongid;// mais atributos}@Entity@PrimaryKeyJoinColumn(name="id")publicclassClienteFisicaextendsClienteimplementsjava.io.Serializable{// nao precisa ID aki, ja pega da maeprivateStringnome;privateStringcpf;// mais atributos}
mas eu uso JOINED…o que vc precisa eu te passei, agora da uma pesquisada…
vinny767
Eu perarei que, de fato, o Hibernate “inventou” uma coluna no insert gerado por ele… um tal de Dtype. Isso que você disse tem relação com esse DType?
T
Thiago_Domingues
como vc usa uma tabela só, provavelmente esse campo é des destinção :: cada classe terá um tipo pra ele poder identificar a que entidade ele é Tipo:: Pessoa - 0, Usuario - 1, etc.pra poder identificar as classes…
filipenf
Não tenho certeza, mas pode ser. Provavelmente quando você não especifica a coluna que armazenará o tipo do objeto ele usa um nome padrão dele. Verifiquei aqui, deve ser mapeado da seguinte forma: