[quote=MarcoAurelioBC]@andrielc
No seu primeiro post vc colocou
Acredito que esta acontecendo isso pela falta de referência à PK, o ideal seria se você tivesse populado a tabela com a lista inicial e sempre que fosse criar um novo projeto você referenciaria a essa PK e sempre terá sua lista padrão. Outra coisa que você pode fazer é configurar sua model já referenciando a esses dados pra não ter erro.
A sua base já tem muitos dados? não compensa mesmo remodelar?[/quote]
Creio que seja por esse caminho mesmo, repensei aqui e ligar projeto aos id’s de tarefa e às atividades, seja a solução.
Minha base não tem muitos dados poderia modificar o modelo sem problema, alguma sugestão ?
Muito obrigado.
[quote=fdiaz2011]@andrielc
Então é mais fácil ainda.
E revendo seu código…
Veja parte do seu código:
Set<Atividade> sac = mapAtividadeAdicionada.get(ta);
ta.setAtividades(sac);
Ai vc disse: Problema se atualizo o objeto ele vai perder a lista inicial de atividades “padrão”
Mas isso é claro.
Qd vc faz ta.setAtividades(sac) vc está colocando nova lista no lugar da antiga.
Se vc quer adicionar atividades a lista antiga vc tem q fazer:
ta.getAtividades.addAll(sac);
Vc estará adicionando novas atividades à lista antiga e não colocando uma lista nova.[/quote]
Sim, uma boa usar isso quando se tem elementos novos e diferentes ao da lista atual, porém o problema é outro, é relacionado ao banco, creio que a solucao que voce disse anteriormente de ter uma tabela e ligar:
id_Projeto -> id_Tarefa -> id_Atividade, seja realmente a solucao.
Obrigado
Agora estou com dificuldade para mapear o relacionamento para criar uma tabela:
id_Projeto id_Tarefa id_Atividade
Alguém sabe como pode ser feito isso usando annotation do Hibernate ?
Obrigado.
Seguido aquela minha sugestão vc só precisa de um mapeamento @ManyToMany entre Tarefa e Atividade
E na Tarefa teria um id_projeto para indicar de qual projeto é aquela tarefa.
[quote=fdiaz2011]Seguido aquela minha sugestão vc só precisa de um mapeamento @ManyToMany entre Tarefa e Atividade
E na Tarefa teria um id_projeto para indicar de qual projeto é aquela tarefa.[/quote]
Olha so, se eu seguir essa sugestão, teremos problema, olha so
Retomando o exemplo acima do Carro e Motor
Criei Projeto A com a Tarefa Design do carro escolhendo APENAS a Atividade Design interior do carro
Ok, tarefa Design do carro.setIdProjeto( A.getId() )
Se eu for recuperar o meu Projeto A, ele vai recuperar a Tarefa Design do carro, porém ele ira listar todas as minhas atividades relacionado ao Design do carro.
[list]1 - Design interior do carro[/list]
[list]2 - Design banco do carro[/list]
[list]3 - Design do farol do carro [/list]
Ficou claro o problema se seguir o que voce sugeriu agora ?
Realmente eu devo adicionar id’s em uma tabela do projeto, porém, como criar as anotações para realizar isso, agora virou outro problema.
Veja o exemplo da tabela Orders Table:
http://www.solarisedesign.co.uk/multiple-tables-with-unique-ids-mysql-joins-and-normalization/
Seria exatamente assim que funcionaria.
Obrigado mais uma vez!
E se vc criar uma outra entidade que tenha relacionamento com as outras tabelas ?
Vc cria uma outra entidade e nela coloca os relacionamentos com mapeamentos necessários.
class AlgumNome() {
private List<Projeto> projetos;
private List<Tarefa> tarefas;
private List<Atividade> atividades;
}
[quote=fdiaz2011]E se vc criar uma outra entidade que tenha relacionamento com as outras tabelas ?
Vc cria uma outra entidade e nela coloca os relacionamentos com mapeamentos necessários.
[code]
class AlgumNome() {
private List<Projeto> projetos;
private List<Tarefa> tarefas;
private List<Atividade> atividades;
}
[/code][/quote]
Pois é rapaz, pensei nisso, porém não sei se é o melhor jeito; não sei se tem como fazer isso com anottations, tipo @Any (se é que entendi bem…):
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc topico 2.4.5.2
Vc vai precisar de um objeto q tenha o projeto, tarefa e atividade.
Então é melhor criar uma nova entidade como disse.
É claro q nessa entidade vc terá q colocar o mapeamento representando o tipo de relacionamento.
Ou seja, vai ter q colocar em cada atributo oq for preciso, tipo @ManyToMany ou outro q seja necessário
Obrigado pela ajuda, então farei dessa maneira.
[quote=fdiaz2011]Vc vai precisar de um objeto q tenha o projeto, tarefa e atividade.
Então é melhor criar uma nova entidade como disse.
É claro q nessa entidade vc terá q colocar o mapeamento representando o tipo de relacionamento.
Ou seja, vai ter q colocar em cada atributo oq for preciso, tipo @ManyToMany ou outro q seja necessário[/quote]
Isso me trouxe mais 3 tabelas
(Nova Entidade) - ProjetoCriado:
[code]@Entity
public class ProjetCreate {
@Id
@GeneratedValue
private Long id;
@OneToOne
private Projeto projeto = new Projeto();
@ManyToMany
private Set<Tarefa> tarefas = new HashSet<Tarefas>();
@ManyToMany
private Set<Atividades> atividades = new HashSet<Actividades>();
}
[/code]
Não seria a mesma coisa eu criar a relação em Projeto de:
@ManyToMany
private Set<Tarefa> tarefas = new HashSet<Tarefas>();
@ManyToMany
private Set<Atividades> atividades = new HashSet<Actividades>();
Essa jogada eu ganharia apenas 2 tabela.