Bom dia colegas!
Tenho projetado duas tabelas com estrutura similar às descritas abaixo:
Tabela Areas Produtivas:
- Id Area Produtiva
- Descricao Area Produtiva
- Intervalo Inicio
- Intervalo Fim
- …
Tabela Atividades:
- Id Atividade
- Area Produtiva (é preenchido com o Id da Area Produtiva que possui o intervalo que o Id Atividade pertence)
- Descricao Atividade
- …
Obs.: Na tabela Atividades, o campo Area Produtiva não é persistido. Esta informação é apenas para apresentação na tela de qual área produtiva pertence aquela atividade.
Minha dúvida é a seguinte.
Existe um relacionamento entre a tabela Atividades e a tabela Áreas Produtivas. Porém está relação se consolida através do Id Atividade (tabela Atividades) e o Intervalo Inicio e Intervalo Fim (tabela Áreas Produtivas). Utilizo a palavra relacionamento para didaticamente expressar minha necessidade, visto que conheço como fazer este relacionamento utilizando as ferramentas conhecidas (aceito sugestões também).
Para clarear cito o Exemplo abaixo:
Instância Área Produtiva Laminação:
- Id Area Produtivia = Laminação
[color=darkred]- Intervalo Inicio - 100
- Intervalo Fim - 200[/color]
- …
Instância Atividade Içamento de Carga:
- [color=red]Id Atividade: 150[/color]
- Área Produtiva = Laminação (valor recebido da Instância Laminação)
- …
Estou utilizando JPA e projetando minhas classes de persitências e encontrei o seguinte problema.
Como utilizar Annotation, NamesQueries ou outro recurso na classe Atividade para preencher o campo Área Produtiva, sendo que a informação vem do intervalo da classe Área Produtiva?
Alguem se Habilita em sugerir uma solução?
c enendi bem
[code]public class AreaProdutiva {
private @Id @GeneratedValue Integer id;
private String descricao;
private Integer inicio;
private Integer fim;
private @OneToMany(mappedBy=“areaProdutiva”) Set<Atividade> atividades = new LinkedHashSet<Atividade>();
//apesar da tabela “Area Produtiva” não ter o campo “atividades”, este pode ser mapeado,
//pela propriedade “areaProdutiva” da tabela “Atividades”, conforme mapeado acima
//… outro métodos
public @Override String toString() { return getDescricao(); }
}
public class Atividade {
private @Id @GeneratedValue Integer id;
private @ManyToOne @JoinColumn(name=“area_produtiva_id”,referencedColumnName=“id”) AreaProdutiva areaProdutiva;
private String descricao;
}[/code]
em resumo seria isso… suas tabela seria mais ou menos assim
AreaProdutiva
Atividade
- id
- area_produtiva_id
- descricao
onde… “area_produtiva_id” da tabela Atividade seria uma Foring Key da tabela de AreaProdutiva ligado ao campo “id”
… por exemplo, neste caso que vc ficou, vc teria
[code]AreaProdutiva laminacao = findByDescricao(AreaProdutiva.class,“Laminação”);
System.out.println(laminacao.getDescricao()); //imprime: Laminação
System.out.println(laminacao.getInicio()); //imprime: 100
System.out.println(laminacao.getFim()); //imprime: 200
//conciderando que laminacao so tenha a ativdade Içamento de carga.
for(Atividade atividade : laminacao.getAtividades()) {
System.out.println(atividade.getId()); // imprime: 150
System.out.println(atividade.getDescricao()); //imprime: Içamento de Carga
System.out.println(atividade.getAreaProdutiva()); //imprime: Laminação
}[/code]
Boa tarde Colega.
Na verdade eu desejava não criar a chave estrangeira e fazer o gerenciamento da atividade via código início e codigo fim da Area Produtiva. Mas seria complexo demais visto que teria que fazer este gerenciamento todo em código na camada de persistência.
Acho que a solução que você apresentou é clássica e a mais recomendada.
Obrigado pelo apoio.