Olá desenvolvedores, estou desenvolvendo em JAVA EE e utilizando o hibernate para gerenciar o banco de dados através das Annotations do hibernate.
Tenho o seguinte problema: Existem um bean que é responsável por manipular as telas de Inspeção de Praga. Cada inspeção pode conter nenhuma, uma, duas ou mais pragas e para cada praga encontrada eu devo informar 4 atributos: quantidade_critica_em_plantas_novas, quantidade_total_em_plantas_novas, quantidade_critica_em_plantas_velhas, quantidade_total_em_plantas_velhas. Além disso uma Praga em específico se encontrada deve-se informar o estágio da praga (ovo, larva, ninfa, adulta) sendo que este estágio pode ser um, alguns ou todos da lista.
A minha dúvida é como criar minhas entidades e como gerencia-las no bean. Em um primeiro pensamento criei as Entidades: Inspecao, Praga e PragaInspecao. Seus códigos seguem abaixo:
Inspecao:
public class Inspecao implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "INSPECAO_SEQUENCE")
private Long id;
@Column(name = "numero_inspecao")
private Integer numInspecao;
@ManyToOne
@JoinColumn(name = "talhao_inspecionado", nullable = false)
private Talhao talhaoInspecionado;
@Column(name = "porcentagem_a_visar", nullable = false)
private double porcentagemAvisar;
@Column(name = "pes_a_visar")
private Integer pesAvisar;
@Column(name = "data_inspecao")
@Type(type = "com.delago.matta.type.LocalDateUserType")
private LocalDate dataInspecao;
@ManyToOne
@JoinColumn(name = "inspetor")
private Funcionario inspetorResponsavel;
@OneToMany(cascade = CascadeType.ALL)
private List<InspecaoPraga> pragas;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusPlanilha status;
}
Praga:
public class Praga implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRAGA_SEQUENCE")
private Long id;
@Column(name = "nome", nullable = false)
private String nome;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "intervalo_baixo")
private Intervalo intervaloBaixo;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "intervalo_medio")
private Intervalo intervaloMedio;
}
InspecaoPraga:
public class InspecaoPraga implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "INSPECAO_PRAGA_SEQUENCE")
private Long id;
@ManyToOne
@JoinColumn(name = "inspecao")
private Inspecao inspecao;
@ManyToOne
@JoinColumn(name = "praga")
private Praga praga;
@Column(name = "qntdMaisElevado_plantasNovas")
private Integer qntdMaisElevadaNovas;
@Column(name = "qntdTotal_plantasNovas")
private Integer qntdTotalNovas;
@Column(name = "qntdMaisElevado_plantasVelhas")
private Integer qntdMaisElevadaVelhas;
@Column(name = "qntdTotal_plantasVelhas")
private Integer qntdTotalVelhas;
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(
name = "estagios_praga",
joinColumns = {
@JoinColumn(name = "estagio_praga_id")}
)
@Column(name = "estagios_praga")
@Enumerated(EnumType.STRING)
private List<EstagioPraga> estagiosEncontrados;
}
O caso de uso da inspeção, se dá da seguinte forma: primeiro é necessário imprimir a planilha de Inspecao (pois ela vai à campo) nessa impressão alguns atributos já são preenchidos (numInspecao, talhaoInspecionado e porcentagemAvisar) - até aqui esta tudo Ok.
Agora começa o obstáculo que estou esbarrando, ao voltar do campo a planilha de Inspeção vem preenchida com as pragas encontradas e suas respectivas quantidades - aquelas 4 que citei um pouco acima - então o usuário deverá buscar a planilha no sistema e depois preencher um formulário referente as pragas e quantidades (além do estagio, se houver a praga que possui estágios).
É aqui que não consigo adicionar cada uma das pragas (e suas quantidades) na no atributo List<InspecaoPraga> da entidade Inspecao além de que a lista de estagio, que é do tipo Enum também não é salva. Como posso proceder aqui ?
Espero que tenha conseguido me expressar bem, qualquer dúvida estarei a disposição para esclarecimentos.
Atte,
Rafael