Opa fala ai Furtado tudo beleza? Cara é o seguinte, vou tentar ser o mais claro possivel, não so muito bom em expressar kkk.
A classe não ficou claro para você? Então ta, primeiro tenho a minha classe Agendamento correto?
@Entity
@SuppressWarnings("serial")
public class Agendamento implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
@ManyToOne
@JoinColumn(name = "carro_codigo")
private Carro carro = new Carro();
@ManyToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "servico_codigo")
private List<Servico> servicos = new ArrayList<Servico>();
private Date dataComeco;
private Date dataFim;
private String observacao;
private Boolean status;
Como a relação do atributo é manyToMany do objeto servico.
@ManyToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "servico_codigo")
private List<Servico> servicos = new ArrayList<Servico>();
Por causa de ser manuytomany irá acabar gerando uma tabela associativa no meu banco com o nome. Agendamento_servico, ai eu ja quiz aproveitar essa tabela e criar uma no java, e acabei criando a tabela com o mesmo nome com a do a banco.
@SuppressWarnings("serial")
@Entity
public class Agendamento_servico implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long codigo;
@ManyToOne
@JoinColumn(name = "Agendamento_codigo")
private Agendamento agendamento = new Agendamento();
@ManyToOne
@JoinColumn(name = "servicos_codigo")
private Servico servico = new Servico();
Essa tabela seria como itens ou ordem de serviço, porque? oque eu estou fazendo é pegar um componente do meu primefaces o shedule que é um calendario, e quando eu clico em uma data ele abre uma dialog e eu gravo o meu agendamento lá, tirando o meu
private List<Servico> servicos = new ArrayList<Servico>();
Aqui eu não salvo nada, eu deixo pra savar os meus serviço na tabela associativa, como itens de serviço entendeu? Não sei se ficou claro, mais irei postar o codigo que eu acho que sera melhor de enteder.
public void adicionarServico() {
agendamentoServicos.add(agendamentoServico);
System.out.println("Tamanho da lista: "
+ this.agendamentoServicos.size());
precoTotalServico();
agendamentoServico = new Agendamento_servico();
precoTotalServico();
}
Nesse metodo eu adiciono os meus serviço quando clico em uma data, porque eu posso ter mais de um serviço em um agendamento.
@Transacional
public void salvar() {
if (agendamento.getCodigo() == null) {
agendamentoDao.salvar(agendamento);
Agendamento agendaCodigo = agendamentoDao
.buscarPorCodigo(agendamento.getCodigo());
for (Agendamento_servico a : agendamentoServicos) {
a.setAgendamento(agendaCodigo);
agendamentoServicos = new ArrayList<Agendamento_servico>();
agendamentoServicoDao.salvar(a);
}
Mensagem.mensagemInfo("Agendamento realizado com sucesso");
} else {
Mensagem.mensagemInfo("Agenda atualizada com sucesso");
}
this.agendamento = new Agendamento();
this.agendamentoServico = new Agendamento_servico();
agendamentoServicos = new ArrayList<Agendamento_servico>();
}
Aqui estou salvando meu agendamento e o meu Agendamento_servico correto?
Acho que ficou mais claro, eu não uso o meu.
private List<Servico> servicos = new ArrayList<Servico>();
Só uso mesmo para gerar a tabela associativa.
Tá oque eu quero fazer? Quando eu salvo um agendamento no meu componente fica mostrando no dia em que salvei os detalhes do agendamento, tipo valor a data e assim por diante.
Mais oque quero mostrar também é quando clicar em um agendamento salvo mostrar minha lista de serviço apenas do agendamento que eu cliquei entendeu? Só que eu fiz assim, já mudei e não tive resultado.
@SuppressWarnings("unchecked")
public List<Agendamento_servico> lista(Long codigo) {
return this.manager
.createQuery(
"Select a from Agendamento_servico a where a.agendamento.codigo = :codigo")
.setParameter("codigo", codigo)
.getResultList();
}
ai no meu bean quando faço a ligação com o dao.
@Transacional
public List<Agendamento_servico> getTeste() {
List<Agendamento_servico> agendaServicos = agendamentoServicoDao
.lista(this.agendamentoServico.getAgendamento().getCodigo());
System.out.println("Tamanho da lista: " + agendaServicos.size());
return agendamentoServicoDao.lista(agendamentoServico.getAgendamento()
.getCodigo());
}
Não tenho nenhum resultado, eu acho que estou errando no meu parametro na hora de passar, porque quando eu eu setto o paramentro com um exemplo salvo no banco de dados passando assim por exemplo, ele me mostra certo.
@Transacional
public List<Agendamento_servico> getTeste() {
List<Agendamento_servico> agendaServicos = agendamentoServicoDao
.lista(1L);
System.out.println("Tamanho da lista: " + agendaServicos.size());
return agendamentoServicoDao.lista(1L);
}
Quando passo um codigo salvo no banco ele me retorna oque eu quero, então eu devo tar errando algo no meu parametro :(, deu para entender?