[RESOLVIDO] Dúvidas Hibernate

5 respostas
J

Estou tendo algumas dúvidas com hibernate.
Estou usando annotations para fazer o mapeamento. Como eu faço o mapeamento para tabelas que são geradas diáriamente?
E o nome dos “ids” das tabelas diárias também mudam.
Por exemplo, eu tenho uma tabela de nome “tabela_20090209”, então, o nome do id será “id_tabela_20090209”.

5 Respostas

F

Talvez tu precise criar classes e annotations diariamente tb! :wink:

Ou tente procurar na internet sobre como configurá-lo programaticamente.

J

Como seria criar classes dinâmicamente?

V

Segue um exemplo:

@Entity

@Table(name=tabela_20090209)

public class Produto {
@Column(name="id_tabela_20090209",nullable=false, length=40)
private String nome;

}

J

Cara, não vou dizer que é impossível, mas vc esbarraria nas seguintes situações:

1ª: O Hibernate lê as anotações na inicialização da sua aplicação, ou seja, qualquer alteração programatica deverá ser feita antes da inicialização do Hibernate.
2ª: O valor de um atributo de uma anotação deve ser uma constante, então, a principio algo como isso não funciona: @Id(name=getNome())

Talvez pra começar a pensar em uma “adaptação técnica” você poderia ver os fontes dessas anotação do Hibernate (Id e Table) e tentar criar as suas proprias, substituindo o valor que vc quer dentro da propria anotação.
Algo como isso:

@Retention(RetentionPolicy.RUNTIME)      
@Target(ElementType.FIELD)
public @interface Id {

	String name() default getDate();
}

O problema só será convencer a VM de que o que vc esta colocando após o default é uma constante :cry:

Boa sorte.

J

Achei uma solução bem interessante. Que já estou até implementando… :grin:

Eu uso o banco PostgreSQL e sei que esta feature também tem no Oracle, o PostgreSQL faz particionamento de tabelas, que pelo que entendi funciona como uma herança.
Cria-se uma tabela pai, que é com quem será feita as trasações CRUD e desta tabela cria-se as tabelas mensais ou diárias, herdando desta tabela pai. E quando os dados forem sendo incluídos as tabelas diárias vão sendo criadas e recebendo os dados e quando for feita uma busca por exemplo, ela será feita nas tabelas diárias.
Desta forma eu mapei a tabela pai com annotations e resolvi o meu problema :grin:
Abaixo segue o link da documentação do postgre:
http://www.postgresql.org/docs/8.3/static/ddl-partitioning.html
Agradeço a ajuda de todos… ABS!!!

Criado 9 de fevereiro de 2009
Ultima resposta 6 de mar. de 2009
Respostas 5
Participantes 4