Modelagem de entidades, adicionar lista de entidade em outra entidade

1 resposta
desenvolvimentoback-endlistlogicajava
R

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

1 Resposta

R

Pra ficar mais claro, pensei numa outra maneira de explicar.

Preciso fazer o processo inverso de um combobox (selectOneMenu), sendo que no combobox eu escolho um objeto de uma lista com vários.

No meu caso, preciso adicionar objetos InspecaoPraga em uma lista.

Criado 17 de outubro de 2016
Ultima resposta 17 de out. de 2016
Respostas 1
Participantes 1