Thymeleaf: выбор вызывающих рекурсивных вызовов - PullRequest
0 голосов
/ 04 октября 2019

Я делаю небольшой проект для универа и столкнулся с некоторыми проблемами. Я использую spring-boot, spring-data-jpa и thymeleaf.

У меня есть два класса "Fundacion" (Фонд):

@Entity
@Table (name = "fundacion")
public @Data class Fundacion
{
    @Id
    @Column (name = "id")
    @GeneratedValue (strategy = GenerationType.AUTO)
    private Long id;

    @Column (name = "nombre")
    @NotNull
    @Size(min = 1, max = 30)
    private String nombre;

    @Column (name = "descripcion")
    @NotNull
    @Size(min = 1, max = 100)
    private String descripcion;

    @Column (name = "presupuestoanual")
    @NotNull
    @Min(0)
    private BigDecimal presupuestoAnual;

    @Column (name = "estado")
    @NotNull
    private boolean estado;

    @OneToMany(mappedBy="afiliadoAFundacion", cascade = CascadeType.ALL)
    private Set<Servicio> servicio;

    @OneToMany(mappedBy="fundacion", cascade = CascadeType.ALL)
    private Set<Solicitud> solicitud;

    @OneToMany(mappedBy="fundacion", cascade = CascadeType.ALL)
    private Set<Empleado> empleado;

и "Servicio" (Сервис):

@Entity
    @Table (name = "servicio")
    public @Data class Servicio
    {
        @Id
        @Column (name = "id")
        @GeneratedValue (strategy = GenerationType.AUTO)
        private Long id;

        @Column (name = "nombre")
        @NotNull
        @Size(min = 1, max = 30)
        private String nombre;

        @Column (name = "tipo")
        @NotNull
        @Size(min = 1, max = 15)
        private String tipo;

        @Column (name = "costo")
        @NotNull
        @Min(0)
        private BigDecimal costo;

        @Column (name = "estado")
        @NotNull
        private boolean estado;

        @OneToMany(mappedBy="servicio", cascade = CascadeType.ALL)
        private Set<DetalleSolicitud> detallesolicitud;

        @ManyToOne
        @JoinColumn(name="idfundacion", nullable=false)
        private Fundacion afiliadoAFundacion;
    }

Репозиторий Fundacion (тоже почти то же самое для Service):

@Repository
public interface IFundacionRepository extends CrudRepository<Fundacion, Long>
{
    List <Fundacion> findByEstadoTrue();
}

И соответствующий метод контроллера:

@RequestMapping(path = {"/editar", "/editar/{id}"})
    public String crearOActualizarServicio(Model model, @PathVariable("id") Optional<Long> id)
                            throws RecordNotFoundException
    {
        if (id.isPresent()) 
        {
            List <Fundacion> listaFundaciones = fundacionService.encontrarTodas();
            if(listaFundaciones.isEmpty())
            {
                listaFundaciones = null;
            }
            model.addAttribute("fundaciones", listaFundaciones);

            Servicio servicio = servicioService.encontrarPorId(id.get());
            model.addAttribute("servicio", servicio);
        } 

        else 
        {
            List <Fundacion> listaFundaciones = fundacionService.encontrarTodas();

            if(listaFundaciones.isEmpty())
            {
                listaFundaciones = null;
            }
            model.addAttribute("fundaciones", listaFundaciones);

            model.addAttribute("servicio", new Servicio());
        }
        return "admin/formularioCrearServicio";
    }

Метод для отображения формы для добавления или редактирования Сервиса.

Наконец, источник самой проблемы:

<form action="#" th:action="@{/servicio/agregar}" th:object="${servicio}" method="post">
    <div class="input-field col s12">
        <select th:field="*{afiliadoAFundacion}">
            <option th:each="fundacion: ${fundaciones}" th:value="${fundacion.id}" th:text="${fundacion.nombre}"></option>
        </select>
    </div>
//More form inputs
</form>

Когда я создаю новый Сервис, форма работаеткак и ожидалось, он отображает выпадающий список со всеми доступными фондами, и когда я отправляю форму, все успешно сохраняется в базе данных.

Однако, если я хочу отредактировать какой-либо сервис, он будет рекурсивно вызыватьметод findById в ServiceRepository до его сбоя.

Это повторяющийся журнал, который повторяется:

Hibernate: select servicio0_.idfundacion as idfundac6_6_0_,
servicio0_.id as id1_6_0_,
 servicio0_.id as id1_6_1_,
 servicio0_.costo as costo2_6_1_,
 servicio0_.estado as estado3_6_1_,
 servicio0_.idfundacion as idfundac6_6_1_,
servicio0_.nombre as nombre4_6_1_,
 servicio0_.tipo as tipo5_6_1_
 from servicio servicio0_ where servicio0_.idfundacion=?

Должно быть что-то, чего мне не хватает, любая помощь будет признательна, спасибо.

РЕДАКТИРОВАТЬ: я пытался заменитьcing с входом и, конечно же, и findByID () для службы работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...