Nome de coluna automático @Column

1 resposta
Grinvon

Estou desenvolvendo uma aplicação onde algumas classes de persistência irão herdar de uma mapeada para herança que criará alguns campos automaticamente.

  • Classe Filha POJO de persistência herda de classe Pai de controle
  • Campos definidos na classe pai serão criados automaticamente pelo hibernate, essa classe usa a annotation @MappedSuperclass.

Porém esses campos definidos na classe pai, deverão ser criados com nome de coluna diferentes, a depender da classe que estende essa classe.

Para isso eu criei uma própria anotação que será capturada por essa classe pai. Mas quando defino nela a @Column para esses campos obtendo o valor da anotação, ela reclama que o atributo precisa ser uma constante.

A annotation se chama @Prefix, onde em cada classe filha (ex: Cliente) passo ela como uma anotação de classe.

@Prefix("CLN") public class Cliente { ... }

@Column(name=valor + "_CD_VERSAO")
private Long versao;

sendo o atributo valor uma string que retêm o valor da annotation Prefix. Não quero usar overriden nesse caso, deixando os atributos getters como abstratos para serem implementados pela filha. Há algum meio de eu definir a criação desses campos passando pela classe filha?

1 Resposta

Grinvon

Bom, achei algo “mais perto” do que eu queria. Porém ainda não é o ideia.

Usando essa annotation, é possível “sobreescrever” a annotation definida (caso exista) da classe pai.
Vejam um exemplo pertinente a minha realidade:

@AttributeOverrides( { @AttributeOverride(name="versaoOffline", column=@Column(name="ADT_CD_VERSAO_OFFLINE")), @AttributeOverride(name="versaoOnline", column=@Column(name="ADT_CD_VERSAO_ONLINE")) })

O ideal seria eu usar a annotation que eu criei chamada de Prefix, onde eu iria nesse caso estabelecer um prefix como “ADT” e passava no escopo da classe, e então a classe pai já atribuia para os meus atributos “versaoOffline” e “versaoOnline” a nomenclatura correta.

Criado 26 de dezembro de 2007
Ultima resposta 26 de dez. de 2007
Respostas 1
Participantes 1