Dúvida para uso de JPA para criação de objetos que utilizam tabelas com relacionamento complexo

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

  • id;
  • descricao
  • inicio
  • fim

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.