Estou tentando fazer um mapeamento de herança cujo tipo será TablePerClass.
Minha dúvida é quanto ao atributo ID e o seu respectivo GeneratedValue.
Na classe genérica que quero herdar (classe abstrata) eu tenho um atributo:
@Id
private int id;
E nas classes que herdam dela eu tenho um override do atributo id para determinar o generatedValue:
@Column(insertable=false, updatable=false)
@GeneratedValue
private int id;
Problemas:
1º - Não é legal ter o override do atributo id… sai da OO.
2º - Mesmo colocando o GeneratedValue nas classes concretas que herdam da classe generica não está sendo setado o “Auto-Increment” nas tabelas que representam as classes concretas. (usando mysql)
Pensei na solução do override também porque assim, se estivesse usando um banco que utilizasse sequences, eu teria que determinar qual o nome da sequence em cada classe concreta que herda da genérica que possui o atributo ID.
Tentei anotar o atributo id da classe abstrata com @GeneratedValue(strategy=GenerationType.AUTO) mas não funcionou.
O que eu fiz foi colocar @GeneratedValue(strategy=GenerationType.TABLE). Desta forma o Hibernate criou uma tabela de “sequencias”, só que tá estranho, pois a cada nova transação ele gera um id com + 65535…
Não acho nenhuma documentação de como trabalhar com id sequencial com mapeamentos de herança TablePerClass, complicado!
Olá lupontes. Essa postagem é de quase 7 anos atrás. A API do Hibernate deve ter mudado muito e não tenho mais codado em Java a algum tempo. Mas a solução que usei na época foi trabalhar com a anotação @MappedSuperclass. Até escrevi um post no blog que tinha: http://germanodeveloper.wordpress.com/2007/09/11/heranca-simples-com-hibernate/.