1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Spring-Boot, não consigo filtrar uma seleção em cascata de grupo, sistema, subsistema, elemento e componente

Olá,

Sou novo aprendizagem da tecnologia Spring-Boot, agora estou a desenvolver um aplicativo de Trabalho de Conclusão do Curso para gestão de manutenção e operação de atividades de usinas hidroelétrica. No entanto estou a ter dificuldade na seleção de um determinado equipamento. É que para chegares num determinado equipamento deves percorrer o "Grupo", um "Sistema", um "Subsistema", um "Elemento" e um "componente", isto é:

Equipamento (grupo -> sistema -> subsistema -> elemento -> componente) todos são array de lista. Ao clicar em grupo, seleciono um item, esse item deve filtrar apenas o sistema a ele vinculado. Ao clicar no sistema também seleciono um item que também deve filtrar o subsistema a ele vinculado e assim sucessivamente até chegar no componente.

O designe que estou a usar é MVC com thymeleaf, JQuery, JPA que me facilita gerar banco de dados relacionais.

Ajudem-me a criar uma metodologia para selecionar esse problema.

A pagina html: os-adicionar

<!DOCTYPE HTML>
<html layout:decorate="~{layout}">
<head>
   <meta charset="UTF-8"/> 
   <meta http-equiv="Content-Type" content="text/html;" />
</head>
<body>
    <section class="corpo" layout:fragment="corpo">

        <nav class="navbar navbar-expand-md bg-light">
                <div class="collapse navbar-collapse" id="navbarsExampleDefault">
                    <ul class="navbar-nav mr-auto">
                        <li class="nav-item active">
                            <i class="oi oi-caret-right"></i>
                            <span>Cadastrar Ordem de Serviço</span>
                        </li>
                    </ul>
                </div>
                <a class="btn btn-primary btn-md" th:href="@{/lts/listar}" role="button">
                    <span class="oi oi-spreadsheet" title="licencaTrabalho" aria-hidden="true"></span>
                    <span>Listar OS</span>
                </a>
        </nav>
        <div class="album py-5 bg-light">    
            <div class="container" id="registro">
                <div class="d-flex justify-content-center">
                    <div th:replace="fragments/alert :: alerta-sucesso"></div>

                    <div id="loader-form" class="pre-load"></div>

                      <form id="form-add-lt" th:action="@{/lts/salvar}" th:object="${licencaTrabalho}" method="POST">

                     <div class="form-row">
                           <div class="col-md-4">
                             <label for="classificacao">Classificação</label>
                            <select id="classificacao" class="form-control" name="classificacao">
                                <option value="">Selecione...</option>
                                <option th:each="c : ${classificacoes}" th:value="${c}" th:text="${c.descricao}"></option>
                            </select>
                             <div id="error-classificacao"></div>
                         </div>
                         <div class="col-md-4">
                              <label for="caracterizacao">Caracterizacão</label>
                            <select id="caracterizacao" class="form-control" name="caracterizacao">
                                <option value="">Selecione...</option>
                                <option th:each="c : ${caracterizacoes}" th:value="${c}" th:text="${c.titulo}"></option>
                            </select>
                            <div id="error-caracterizacao"></div>
                          </div>

                           <div class="col-md-4">
                              <label for="manutencao">Tipo de Manutenção</label>
                            <select id="manutencao" class="form-control" name="manutencao" >
                                <option value="">Selecione...</option>
                                <option th:each="c : ${manutencoes}" th:value="${c}" th:text="${c.descricao}"></option>
                            </select>
                            <div id="error-manutencao"></div>
                          </div>

                     </div>

                     <div class="xy">
                         <p>Equipamento</p>
                          <div class="">
                            <select id="grupo" class="form-control" name="grupo">
                                <option value="">Grupo</option>
                                <option th:each="c : ${grupos}" th:value="${c.id}" th:text="${c.descricao}"></option>
                            </select>
                                <div class="invalid-feedback" id="error-grupo"></div>
                         </div>
                         <div class="">
                            <select id="sistema" class="form-control" name="sistema" >
                                <option value="">Sistema</option>
                                <option th:each="c : ${sistemas}" th:value="${c.id}" th:text="${c.descricao}" ></option>
                            </select>
                                <div class="invalid-feedback" id="error-sistema"></div>
                         </div>
                         <div class="">
                            <select id="subSistema" class="form-control" name="subSistema" >
                                <option value="">Subsistema</option>
                                <option th:each="c : ${subSistemas}" th:value="${c.id}" th:text="${c.descricao}" ></option>
                            </select>
                                <div class="invalid-feedback" id="error-subSistema"></div>
                         </div>
                          <div class="">
                            <select id="elemento" class="form-control" name="elemento" >
                                <option value="">Elemento</option>
                                <option th:each="c : ${elementos}" th:value="${c.id}" th:text="${c.descricao}" ></option>
                            </select>
                                <div class="invalid-feedback" id="error-elemento"></div>
                         </div>
                          <div class="">
                            <select id="componente" class="form-control" name="componente" >
                                <option value="">Componente</option>
                                <option th:each="c : ${componentes}" th:value="${c.id}" th:text="${c.descricao}" ></option>
                            </select>
                                <div class="invalid-feedback" id="error-componente"></div>
                         </div>
                     </div>

                    <div class="form-row">
                           <div class="form-group col-md-6">
                            <label for="programadoParaDia">Programado para dia</label>
                            <input type="date" id="programadoParaDia" class="form-control" name="programadoParaDia" th:field="*{programadoParaDia}" required/>
                             <div class="invalid-feedback" >É obrigatório preencher</div>
                        </div>
                        <div class="form-group col-md-6">
                            <label for="horaParaDia">hora</label>
                            <input type="time" id="horaParaDia" class="form-control" name="horaParaDia" th:field="*{horaParaDia}" required />
                             <div class="invalid-feedback" >É obrigatório preencher</div>
                        </div>
                        <div class="form-group col-md-6">
                            <label for="ateDia">até dia</label>
                            <input type="date" id="ateDia" class="form-control" name="ateDia" th:field="*{ateDia}" required />
                             <div class="invalid-feedback" >É obrigatório preencher</div>
                        </div>
                        <div class="form-group col-md-6">
                            <label for="horaAteDia">hora</label>
                            <input type="time" id="horaAteDia" class="form-control" name="horaAteDia" th:field="*{horaAteDia}" required />
                             <div class="invalid-feedback" >É obrigatório preencher</div>
                        </div>
                        <div class="form-row ">
                            <label for="horaEmCasoDispor">Em caso de necessidade pode-se dispor o equipamento em</label>
                            <input type="number" id="horaEmCasoDispor" name="horaEmCasoDispor" th:text="${horaEmCasoDispor}" />
                             <label for="horaEmCasoDispor"> horas</label>
                             <div class="invalid-feedback" ></div>
                        </div>
                     </div>



                    <div>
                        <div class="">
                             <label for="encarregado">Encarregado de serviço</label>
                            <select id="encarregado" class="" name="encarregado">
                                <option value="">Selecione...</option>
                                <option th:each="c : ${encarregados}" th:value="${c.id}" th:text="${c.nome}"></option>
                            </select>
                                <div class="invalid-feedback" id="error-encarregado"></div>
                         </div>
                    </div>

                     <div class="form-group">
                        <label for="trabalhoAEfectuar">Trabalho a efectuar</label>
                        <textarea class="form-control" id="trabalhoAEfectuar" name="trabalhoAEfectuar"
                                  placeholder="Trabalho a iniciar..."></textarea>
                    </div>
                    <input type="hidden" th:field="*{id}"/>
                    <div class="form-group">
                        <div class="form-control">        
                            <button type="submit" class="btn btn-primary btn-lg btn-block">Salvar</button>
                        </div>
                    </div>
                </form>
                </div>
            </div>
        </div>
    </section>

    <script    th:src="~{}" th:fragment="js"></script>
    <script th:inline="javascript" th:fragment="inlinescript"></script>
</body>
</html>

Classe Controller:


@Controller
@RequestMapping("/oss")
public class OsController {


    @Autowired
    LicencaTrabalhoservice licencaTrabalhoservice;

    @Autowired
    FonteDeGeracaoService fonteDeGeracaoService;

    @Autowired
    CentralService centralService;

    @Autowired
    GrupoService grupoService;

    @Autowired
    SistemaService sistemaService;

    @Autowired
    SubSistemaService subSistemaService;

    @Autowired
    ElementoService elementoService;

    @Autowired
    ComponenteService componenteService;

    @Autowired
    FuncionarioService funcionarioService;

    @Autowired
    ParalizadaService paralizadaService;

    @Autowired
    ReiniciadaService reiniciadaService;

    //==================================================Adicionar================================================================

    @GetMapping("/registrar")
    public String abrirCadastro(LicencaTrabalho licencaTrabalho) {
        return "os/os-adicionar";
    }

    @PostMapping("/salvar")
    public String salvarLt(@Valid LicencaTrabalho licencaTrabalho, BindingResult result, RedirectAttributes attr) {

        if (result.hasErrors()) {
            attr.addFlashAttribute("falha", "Funcionário não foi inserido. Tente outra vez");
            return "os/os-adicionar";
        }
        licencaTrabalhoservice.salvar(licencaTrabalho);
        attr.addFlashAttribute("sucesso", "Funcionário inserido com sucesso.");
            return "redirect:/oss/registrar";
        }

    @ModelAttribute("classificacoes")
    public Classificacao[] getClassificacoes() {
        return Classificacao.values();
    }

    @ModelAttribute("caracterizacoes")
    public Caracterizacao[] getCaracterizacoes() {
        return Caracterizacao.values();
    }

    @ModelAttribute("manutencoes")
    public Manutencao[] getManutencoes() {
        return Manutencao.values();
    }

    @ModelAttribute("grupos")
    public List<Grupo> getGrupos() {
        return grupoService.buscarTodos();
    }

    @ModelAttribute("sistemas")
    public List<Sistema> getSistemas() {
        return sistemaService.buscarTodos();
    }

    @ModelAttribute("subSistemas")
    public List<SubSistema> getSubSistemas() {
        return subSistemaService.buscarTodos();
    }

    @ModelAttribute("elementos")
    public List<Elemento> getElementos() {
        return elementoService.buscarTodos();
    }

    @ModelAttribute("componentes")
    public List<Componente> getComponentes() {
        return componenteService.buscarTodos();
    }

    @ModelAttribute("encarregados")
    public List<Usuario> getEncarregados() {
        return funcionarioService.buscarTodos();
    }

}

Classes Service:

public interface LicencaTrabalhoservice {

    void salvar(LicencaTrabalho licencaTrabalho);

    void editar(LicencaTrabalho licencaTrabalho);

    void excluir(Long id);

    LicencaTrabalho buscarPorId(Long id);

    List<LicencaTrabalho> buscarTodos();

    List<LicencaTrabalho>  buscarPorGrupo(Long id);

    List<LicencaTrabalho>  buscarPorSistema(Long id);

    List<LicencaTrabalho>  buscarPorSubSistema(Long id);

    List<LicencaTrabalho>  buscarPorElemento(Long id);

    List<LicencaTrabalho>  buscarPoryComponetnete(Long id);

    List<LicencaTrabalho>  buscarPorProgramadoParaDia(LocalDate programadoParaDia);

    List<LicencaTrabalho>  buscarPorEncarregado(Long id);

    List<LicencaTrabalho>  buscarPorValidador(Long id);

    List<LicencaTrabalho>  buscarPorDepartamentoSolicitou(Long id);

    List<LicencaTrabalho>  buscarPorTramitadoPor(Long id);

    List<LicencaTrabalho>  buscarPorAprovadoPor(Long id);

    List<LicencaTrabalho>  buscarPorDataInicio(LocalDate dataInicio);

    List<LicencaTrabalho>  buscarPorInicioEncarregado(Long id);

    List<LicencaTrabalho>  buscarPorReiniciada(Long id);

    List<LicencaTrabalho>  buscarPorParalizada(Long id);

    List<LicencaTrabalho>  buscarPorEncarregadoTermino(Long id);

    List<LicencaTrabalho>  buscarPorDataTermino(LocalDate dataTermino);

}
public interface GrupoService {

void salvar(Grupo grupo);

    void editar(Grupo grupo);

    Grupo buscarPorId(Long id);

    List<Grupo> buscarTodos();

    boolean cargoTemSistema(Long id);

    List<Grupo> buscarPorGrupo(String descricao);
}
public interface SistemaService {

    void salvar(Sistema sistema);

    void editar(Sistema sistema);

    Sistema buscarPorId(Long id);

    List<Sistema> buscarTodos();

    boolean cargoTemSubSistema(Long id);

    List<Sistema> buscarPorSistema(String descricao);
}
public interface SubSistemaService {

    FonteDeGeracao buscarFontePorId(Long id);

    Central buscaCentralrPorId(Long id);
    boolean CentralTemFonteDeGeracao(Long id);

    Grupo buscarGrupoPorId(Long id);
    boolean GrupoTemCentral(Long id);

    Sistema buscarSistemaPorId(Long id);
    boolean SistemaTemGrupo(Long id);

    void salvar(SubSistema subSistema);
    void editar(SubSistema subSistema);
    SubSistema buscarPorId(Long id);
    List<SubSistema> buscarTodos();
    boolean SubSistemaTemSistema(Long id);    

    List<SubSistema> buscarPorSubSistema(String descricao);
}
public interface ElementoService {

    FonteDeGeracao buscarFontePorId(Long id);

    Central buscaCentralrPorId(Long id);
    boolean CentralTemFonteDeGeracao(Long id);

    Grupo buscarGrupoPorId(Long id);
    boolean GrupoTemCentral(Long id);

    Sistema buscarSistemaPorId(Long id);
    boolean SistemaTemGrupo(Long id);

    SubSistema buscarSubSistemaPorId(Long id);
    boolean SubSistemaTemSistema(Long id);

    void salvar(Elemento elemento);
    void editar(Elemento elemento);
    Elemento buscarPorId(Long id);
    List<Elemento> buscarTodos();
    boolean ElementoTemSubSistema(Long id);    

    List<Elemento> buscarPorElemento(String descricao);
}
public interface ComponenteService {


    FonteDeGeracao buscarFontePorId(Long id);

    Central buscaCentralrPorId(Long id);

    Grupo buscarGrupoPorId(Long id);

    Sistema buscarSistemaPorId(Long id);

    SubSistema buscarSubSistemaPorId(Long id);

    Elemento buscarElementoPorId(Long id);    

    void salvar(Componente componente);
    void editar(Componente componente);
    Componente buscarComponentePorId(Long id);
    List<Componente> buscarTodos();

    List<Componente> buscarPorComponente(String descricao);
}

Classes Repository/ DAO:

public abstract class AbstractDao<T, PK extends Serializable> {

    @SuppressWarnings("unchecked")
    private final Class<T> entityClass = 
            (Class<T>) ( (ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

    @PersistenceContext
    private EntityManager entityManager;

    protected EntityManager getEntityManager() {
        return entityManager;
    }

    public void save(T entity) { 

        entityManager.persist(entity);
    }

    public T salvar(T entity) {
        entityManager.persist(entity);
        return entity;
    }

    public void update(T entity) {

        entityManager.merge(entity);
    }

    public void delete(PK id) {

        entityManager.remove(entityManager.getReference(entityClass, id));
    }

    public T findById(PK id) {

        return entityManager.find(entityClass, id);
    }

    public List<T> findAll() {

        return entityManager
                .createQuery("from " + entityClass.getSimpleName(), entityClass)
                .getResultList();
    }    

    protected List<T> createQuery(String jpql, Object... params) {
        TypedQuery<T> query = entityManager.createQuery(jpql, entityClass);
        for (int i = 0; i < params.length; i++) {
            query.setParameter(i+1, params[i]);
        }
        return query.getResultList();
    }

}
public interface LicencaTrabalhoDAO {

    void save(LicencaTrabalho licencaTrabalho);

    void update(LicencaTrabalho licencaTrabalho);

    void delete(Long id);

    LicencaTrabalho findById(Long id);

    List<LicencaTrabalho> findAll();


    List<LicencaTrabalho> findByGrupo(Long id);

    List<LicencaTrabalho> findBySistema(Long id);

    List<LicencaTrabalho> findBySubSistema(Long id);

    List<LicencaTrabalho> findByElemento(Long id);

    List<LicencaTrabalho> findByComponetnete(Long id);

    List<LicencaTrabalho> findByProgramadoParaDia(LocalDate programadoParaDia);

    List<LicencaTrabalho> findByEncarregado(Long id);

    List<LicencaTrabalho> findByValidador(Long id);

    List<LicencaTrabalho> findByDepartamentoSolicitou(Long id);

    List<LicencaTrabalho> findByTramitadoPor(Long id);

    List<LicencaTrabalho> findByAprovadoPor(Long id);

    List<LicencaTrabalho> findByDataInicio(LocalDate dataInicio);

    List<LicencaTrabalho> findByInicioEncarregado(Long id);

    List<LicencaTrabalho> findByReiniciada(Long id);

    List<LicencaTrabalho> findByParalizada(Long id);

    List<LicencaTrabalho> findByEncarregadoTermino(Long id);

    List<LicencaTrabalho> findByDataTermino(LocalDate dataTermino);

}
public interface GrupoDAO {

    void save(Grupo grupo);
    void update(Grupo grupo);
    Grupo findById(Long id);
    List<Grupo> findAll();


    List<Grupo> findByGrupo(String descricao);
}
public interface SistemaDAO {

    void save(Sistema sistema);
    void update(Sistema sistema);
    Sistema findById(Long id);
    List<Sistema> findAll();

    List<Sistema> findBySistema(String descricao);
}
public interface SubSistemaDAO {

    void save(SubSistema subSistema);
    void update(SubSistema subSistema);
    SubSistema findById(Long id);
    List<SubSistema> findAll();

    List<SubSistema> findBySubSistema(String descricao);
}
public interface ElementoDAO {

    void save(Elemento elemento);
    void update(Elemento elemento);
    Elemento findById(Long id);
    List<Elemento> findAll();

    List<Elemento> findByElemento(String descricao);
}
public interface ComponenteDAO  {

    void save(Componente componente);
    void update(Componente componente);
    Componente findById(Long id);
    List<Componente> findAll();
    List<Componente> findByNome(String nome);
    List<Componente> findByKks(String kks);
    List<Componente> findByCodigo(String codigo);

    List<Componente> findByComponente(String descricao);
}

Classes Entidade:

@SuppressWarnings("serial")
@MappedSuperclass
public abstract class AbstractModel <ID extends Serializable> implements Serializable {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private ID id;

    public ID getId() {
        return id;
    }

    public void setId(ID id) {
        this.id = id;
    }

    public boolean hasNotId() {
        return id == null;
    }

    public boolean hasId() {
        return id != null;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AbstractModel<?> other = (AbstractModel<?>) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "AbstractModel [id=" + id + "]";
    }

}
@SuppressWarnings("serial")
@Entity
@Table(name="ordem_servico")
public class LicencaTrabalho extends AbstractModel<Long> {

    @NotNull(message = "{NotNull.licenca_trabalho.classificacao}")
    @Column(nullable = false, length = 10)
    @Enumerated(EnumType.STRING)
    private Classificacao classificacao;

    @NotNull(message = "{NotNull.licenca_trabalho.caracterizacao}")
    @Column(nullable = false, length = 10)
    @Enumerated(EnumType.STRING)
    private Caracterizacao caracterizacao;

//    private String consecutivo;

    @NotNull(message = "{NotNull.licenca_trabalho.manutencao}")
    @Column(nullable = false, length = 32)
    @Enumerated(EnumType.STRING)
    private Manutencao manutencao;

    @JsonIgnore
    @NotNull(message = "{NotNull.licenca_trabalho.grupo}")
    @ManyToOne
    @JoinColumn(name="id_grupo_fk", updatable=true, nullable=false)
    private Grupo grupo;

    @JsonIgnore
    @NotNull(message = "{NotNull.licenca_trabalho.sistema}")
    @ManyToOne
    @JoinColumn(name="id_sistema_fk", updatable=true, nullable=false)
    private Sistema sistema;

    @JsonIgnore
    @NotNull(message = "{NotNull.licenca_trabalho.subSistema}")
    @ManyToOne
    @JoinColumn(name="id_subSistema_fk", updatable=true, nullable=false)
    private SubSistema subSistema;

    @JsonIgnore
    @NotNull(message = "{NotNull.licenca_trabalho.elemento}")
    @ManyToOne
    @JoinColumn(name="id_elemento_fk", updatable=true, nullable=false)
    private Elemento elemento;

    @JsonIgnore
    @NotNull(message = "{NotNull.licenca_trabalho.componente}")
    @ManyToOne
    @JoinColumn(name="id_componente_fk", updatable=true, nullable=false)
    private Componente componente;

    @DateTimeFormat(iso = ISO.DATE)
    @PastOrPresent(message = "{PastOrPresent.funcionario.programadoParaDia}")
    @Column(name= "programado_p_dia", nullable = false, columnDefinition = "DATE")
    private LocalDate programadoParaDia;

    @DateTimeFormat(iso = ISO.TIME)
    @Column(name= "hora_p_dia", nullable = false, columnDefinition = "TIME")
    private LocalTime horaParaDia; 

    @DateTimeFormat(iso = ISO.DATE)
    @Column(name= "ate_dia", nullable = false, columnDefinition = "DATE")
    private LocalDate ateDia;

    @DateTimeFormat(iso = ISO.TIME)
    @Column(name= "hora_ate_dia", nullable = false, columnDefinition = "TIME")
    private LocalTime horaAteDia;

    @Column(name="prorogar", nullable = false)
    private int prorogar;

    //private Ard ard;

    @Column(name="trabalho_a_efectuar", updatable=true, nullable = false)
    private String trabalhoAEfectuar;

    @JsonIgnore
    @Valid
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "encarregado_id_fk", updatable=true, insertable=true)
    private Usuario encarregado;

    @JsonIgnore
    @Valid
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "tramitado_por_id_fk", insertable=true, updatable=true)
    private Usuario tramitadoPor;


    @Column(name= "", insertable = true, updatable=true)
    private String isolacao;

    @Column(name= "", insertable = true, updatable=true)
    private String instrucaoPrecaucao;


    public Classificacao getClassificacao() {
        return classificacao;
    }

    public void setClassificacao(Classificacao classificacao) {
        this.classificacao = classificacao;
    }

    public Caracterizacao getCaracterizacao() {
        return caracterizacao;
    }

    public void setCaracterizacao(Caracterizacao caracterizacao) {
        this.caracterizacao = caracterizacao;
    }

    public Manutencao getTipoManutencao() {
        return manutencao;
    }

    public void setTipoManutencao(Manutencao manutencao) {
        this.manutencao = manutencao;
    }

    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }

    public Sistema getSistema() {
        return sistema;
    }

    public void setSistema(Sistema sistema) {
        this.sistema = sistema;
    }

    public SubSistema getSubSistema() {
        return subSistema;
    }

    public void setSubSistema(SubSistema subSistema) {
        this.subSistema = subSistema;
    }

    public Elemento getElemento() {
        return elemento;
    }

    public void setElemento(Elemento elemento) {
        this.elemento = elemento;
    }

    public Componente getComponente() {
        return componente;
    }

    public void setComponente(Componente componente) {
        this.componente = componente;
    }

    public LocalDate getProgramadoParaDia() {
        return programadoParaDia;
    }

    public void setProgramadoParaDia(LocalDate programadoParaDia) {
        this.programadoParaDia = programadoParaDia;
    }

    public LocalTime getHoraParaDia() {
        return horaParaDia;
    }

    public void setHoraParaDia(LocalTime horaParaDia) {
        this.horaParaDia = horaParaDia;
    }

    public LocalDate getAteDia() {
        return ateDia;
    }

    public void setAteDia(LocalDate ateDia) {
        this.ateDia = ateDia;
    }

    public LocalTime getHoraAteDia() {
        return horaAteDia;
    }

    public void setHoraAteDia(LocalTime horaAteDia) {
        this.horaAteDia = horaAteDia;
    }

    public int getPorogar() {
        return prorogar;
    }

    public void setProrogar(int prorogar) {
        this.prorogar = prorogar;
    }

    public String getTrabalhoAEfectuar() {
        return trabalhoAEfectuar;
    }

    public void setTrabalhoAEfectuar(String trabalhoAEfectuar) {
        this.trabalhoAEfectuar = trabalhoAEfectuar;
    }

    public Usuario getEncarregado() {
        return encarregado;
    }

    public void setEncarregado(Usuario encarregado) {
        this.encarregado = encarregado;
    }





    public String getIsolacao() {
        return isolacao;
    }

    public void setIsolacao(String isolacao) {
        this.isolacao = isolacao;
    }

    public String getInstrucaoPrecaucao() {
        return instrucaoPrecaucao;
    }

    public void setInstrucaoPrecaucao(String instrucaoPrecaucao) {
        this.instrucaoPrecaucao = instrucaoPrecaucao;
    }

    public Usuario getTramitadoPor() {
        return tramitadoPor;
    }

    public void setTramitadoPor(Usuario tramitadoPor) {
        this.tramitadoPor = tramitadoPor;
    }

}
@SuppressWarnings("serial")
@Entity
@Table(name="GRUPOS")
public class Grupo extends AbstractModel<Long> {

    @JoinColumn(name = "id_central_fk")
    private Long central;

    @OneToMany(mappedBy = "grupo", cascade = ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Sistema> sistemas = new ArrayList<Sistema>();

    private String codigo = "";

    private String descricao;

    @OneToMany(mappedBy = "grupo")
    private List<LicencaTrabalho> licencasTrabalho = new ArrayList<LicencaTrabalho>();

    public List<Sistema> getSistemas() {
        return sistemas;
    }

    public void setSistemas(List<Sistema> sistemas) {
        this.sistemas = sistemas;
    }

    public Long getCentral() {
        return central;
    }

    public void setCentral(Long central) {
        this.central = central;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<LicencaTrabalho> getLicencasTrabalho() {
        return licencasTrabalho;
    }

    public void setLicencasTrabalho(List<LicencaTrabalho> licencasTrabalho) {
        this.licencasTrabalho = licencasTrabalho;
    }


}
@SuppressWarnings("serial")
@Entity
@Table(name="SISTEMAS")
public class Sistema extends AbstractModel<Long> {

    @JoinColumn(name = "id_grupo_fk")
    private Long grupo;

    @OneToMany(mappedBy ="sistema", cascade = ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<SubSistema> subSistemas = new ArrayList<SubSistema>();

    private String codigo = "";

    private String descricao;

    @OneToMany(mappedBy = "sistema")
    private List<LicencaTrabalho> licencasTrabalho = new ArrayList<LicencaTrabalho>();

    public List<SubSistema> getSubSistemas() {
        return subSistemas;
    }

    public void setSubSistemas(List<SubSistema> subSistemas) {
        this.subSistemas = subSistemas;
    }

    public Long getGrupo() {
        return grupo;
    }

    public void setGrupo(Long grupo) {
        this.grupo = grupo;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<LicencaTrabalho> getLicencasTrabalho() {
        return licencasTrabalho;
    }

    public void setLicencasTrabalho(List<LicencaTrabalho> licencasTrabalho) {
        this.licencasTrabalho = licencasTrabalho;
    }


}
@SuppressWarnings("serial")
@Entity
@Table(name="SUBSISTEMAS")
public class SubSistema extends AbstractModel<Long> {

    @JoinColumn(name = "id_sistema_fk")
    private Long sistema;

    @OneToMany(mappedBy = "subsistema",cascade = ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Elemento> elementos;

    private String kks;

    private String codigo = "";

    @OneToMany(mappedBy = "subSistema")
    private List<LicencaTrabalho> licencasTrabalho = new ArrayList<LicencaTrabalho>();

    private String descricao;

    public List<Elemento> getElementos() {
        return elementos;
    }

    public void setElementos(List<Elemento> elementos) {
        this.elementos = elementos;
    }

    public String getKks() {
        return kks;
    }

    public void setKks(String kks) {
        this.kks = kks;
    }

    public Long getSistema() {
        return sistema;
    }

    public void setSistema(Long sistema) {
        this.sistema = sistema;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<LicencaTrabalho> getLicencasTrabalho() {
        return licencasTrabalho;
    }

    public void setLicencasTrabalho(List<LicencaTrabalho> licencasTrabalho) {
        this.licencasTrabalho = licencasTrabalho;
    }


}
@SuppressWarnings("serial")
@Entity
@Table(name="ELEMENTOS")
public class Elemento extends AbstractModel<Long> {

    @JoinColumn(name = "id_subsistema_fk")
    private Long subsistema;

    @JsonIgnore
    @OneToMany(mappedBy = "elemento", cascade = ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Componente> componentes = new ArrayList<Componente>();

    private String kks;

    private String codigo = "";

    private String descricao;

    @OneToMany(mappedBy = "elemento")
    private List<LicencaTrabalho> licencasTrabalho;

    public List<Componente> getComponentes() {
        return componentes;
    }

    public void setComponentes(List<Componente> componentes) {
        this.componentes = componentes;
    }

    public String getKks() {
        return kks;
    }

    public void setKks(String kks) {
        this.kks = kks;
    }

    public Long getSubsistema() {
        return subsistema;
    }

    public void setSubsistema(Long subsistema) {
        this.subsistema = subsistema;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<LicencaTrabalho> getLicencasTrabalho() {
        return licencasTrabalho;
    }

    public void setLicencasTrabalho(List<LicencaTrabalho> licencasTrabalho) {
        this.licencasTrabalho = licencasTrabalho;
    }


}
@SuppressWarnings("serial")
@Entity
@Table(name="COMPONENTES")
public class Componente extends AbstractModel<Long> {



    private String kks;

    @JoinColumn(name = "id_elemento_fk")
    private Long elemento;

    private String codigo = "";

    private String descricao;

    @OneToMany(mappedBy = "componente")
    private List<LicencaTrabalho> licencasTrabalho = new ArrayList<LicencaTrabalho>();

    public String getKks() {
        return kks;
    }

    public void setKks(String kks) {
        this.kks = kks;
    }

    public Long getElemento() {
        return elemento;
    }

    public void setElemento(Long elemento) {
        this.elemento = elemento;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<LicencaTrabalho> getLicencasTrabalho() {
        return licencasTrabalho;
    }

    public void setLicencasTrabalho(List<LicencaTrabalho> licencasTrabalho) {
        this.licencasTrabalho = licencasTrabalho;
    }


}

Arquivo pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.centralhidrico.gestao</groupId>
    <artifactId>demo-mvc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>agmanop</name>
    <description>Gestao de exploracao de centrais hidricos</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.ocpsoft.prettytime</groupId>
            <artifactId>prettytime</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <!-- 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
         -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <!-- Plugin que gerenca o projecto dentro da IDE -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version><!--$NO-MVN-MAN-VER$-->
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
                <groupId>org.webjars</groupId>
             <artifactId>webjars-locator-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.webjars.bower</groupId>
            <artifactId>open-iconic</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1-1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars.bower</groupId>
            <artifactId>jquery-mask-plugin</artifactId>
            <version>1.14.13</version>
        </dependency>
        <dependency>
            <groupId>nz.net.ultraq.thymeleaf</groupId>
            <artifactId>thymeleaf-layout-dialect</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        </dependency>
         -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Classe de inicialização

@SpringBootApplication
public class GestaoExplorCentralhidricoApplication {

    public static void main(String[] args) {
        SpringApplication.run(GestaoExplorCentralhidricoApplication.class, args);
    }

}

O codigo fonte

Atenciosamente,

Sérgio M. C. Sebastião

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring-mvc ou faça a sua própria pergunta.