Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate: @OneToMany<->@ManyToOne - Рекурсия 
:(
    Опции темы
Killer_13
  Дата 1.5.2014, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Уже который день не могу понять почему вылетает следующая ошибка. Решения то есть, но как-то странно, перепробовал, и не работает. Даже нонсенс - на одном комп такая конфигурация работает на ура, на другом нет.

Суть: У одного объекта есть список с другими объектами. Хочу чтоб другой объект сохранял в себе ссылку на объект родителя. Нуу из аннотаций в теме все понятно.


Последовательность вызовов

Код

1.    @RequestMapping(value = "id/{participantId}/module/{module}/objective", method = RequestMethod.POST) - OK
2.    @RequestMapping(value = "id/{participantId}/module/{module}/objectives", method = RequestMethod.GET) - OK
3.    @RequestMapping(value = "id/{participantId}/module/{module}/objective/{objectiveId}/action", method = RequestMethod.POST) - OK
4.    @RequestMapping(value = "id/{participantId}/module/{module}/objectives", method = RequestMethod.GET) - ERROR


Вот как выглядят entities сейчас(Этот вариант прекрасно работает на одном комп, на другом нет). 

Код

@Entity
@Data
public class Objective implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "objective_id")
    private Long id;

..............................


    /**
     * the actions of objective
     */
    // @Cascade({CascadeType.ALL})
    // @JsonManagedReference
    // @JsonBackReference
    // @JsonIgnore
    @OneToMany(mappedBy = "objective", fetch = FetchType.EAGER, orphanRemoval = true)
    private List<Action> actions;

..............................

}


Код

@Entity
@Data
public class Action {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

..............................

    /**
     * objective of this action
     */
//    @JsonBackReference
//    @JsonManagedReference
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "objective_id")
    @JsonIgnore
    private Objective objective;

..............................

}


Весь стек-трейс закинуть не могу(так как рекурсия), но вот часть.
Код

WARN  2014-05-01 18:00:01,201 [1403671073@qtp-164700615-0] o.s.w.s.m.s.DefaultHandlerExceptionResolver 'Handling of [org.springframework.http.converter.HttpMessageNotWritableException] resulted in Exc
eption'
java.lang.IllegalStateException: Committed
    at org.mortbay.jetty.Response.resetBuffer(Response.java:1023) ~[jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.Response.sendError(Response.java:240) ~[jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.Response.sendError(Response.java:342) ~[jetty-6.1.26.jar:6.1.26]
    at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.sendServerError(DefaultHandlerExceptionResolver.java:309) ~[spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotWritable(DefaultHandlerExceptionResolver.java:366) ~[spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException(DefaultHandlerExceptionResolver.java:139) ~[spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:136) [spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1148) [spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:985) [spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) [spring-webmvc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
2014-05-01 18:00:01.204:WARN::/welldoo-tk-service-objective/id/13/module/RELAX/objectives
org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError) (through reference chain: com.service.objective.domain.objec
tive.Objective["actions"]->org.hibernate.collection.internal.PersistentBag[0]->com.service.objective.domain.action.Action["objective"]->com.service.objective.domain.objective.Objec
tive["actions"]->org.hibernate.collection.internal.PersistentBag[0]->com.service.objective.domain.action.Action["objective"]->com.service.objective.domain.objective.Objective["acti
ons"]->org.hibernate.collection.internal.PersistentBag[0]

 
PM MAIL   Вверх
Samotnik
Дата 3.5.2014, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Передаешь entity на прямую без трансфер объектов? Поставь на маппинг @JSonIgnore или как то так. И EAGER лучше не использовать
PM MAIL   Вверх
Killer_13
Дата 3.5.2014, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Samotnik @ 3.5.2014,  21:13)
Передаешь entity на прямую без трансфер объектов? Поставь на маппинг @JSonIgnore или как то так. И EAGER лучше не использовать

Это как? Пробовал и так и сяк, не идет. Хотя когда и там и там JsonIgnore, то появляется проблема сохранения. Я думаю, что я неправильно сохраняю объекты. Не подскажете как правильно сохранять и обновлять объекты в двунаправленных связях? Спасибо!

Код

    public Objective createObjective(ObjectiveModel objectiveModel, long participantId, TkModule module) {

        Objective objective = new Objective();
        objective.setName(objectiveModel.getName());
        objective.setParticipantId(participantId);
        objective.setDateStart(objectiveModel.getDateStart());
        objective.setModule(module);

        objectiveRepository.save(objective);

        return objective;
    }



Код

    public Action createAction(long participantId, TkModule module, long objectiveId, ActionModel actionModel) {

        Objective objective = objectiveRepository.findByParticipantIdAndModuleAndId(participantId, module, objectiveId);

        if (objective != null) {
            Action action = new Action();
            action.setObjective(objective);
            action.setName(actionModel.getName());
            action.setAmount(actionModel.getAmount());
            action.setDateStart(actionModel.getDateStart());
            if (actionModel.getDateEnd() != null) {
                action.setDateEnd(actionModel.getDateEnd());
            }
            action.setFrequencyFlag(actionModel.getFrequencyFlag());
            action.setDaysOfWeek(actionModel.getDaysOfWeek());

            actionRepository.save(action);

            return action;
        } else {
            throw new ServiceException("The action with this ID does not exist.", "objective.id.bad");
        }
    }

PM MAIL   Вверх
Samotnik
Дата 6.5.2014, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



на первый взгляд все верно, LAZY пробывал?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.