powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
10 сообщений из 10, страница 1 из 1
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631034
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже который день не могу понять почему вылетает следующая ошибка. Решения то есть, но как-то странно, перепробовал, и не работает. Даже нонсенс - на одном комп такая конфигурация работает на ура, на другом нет.

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


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

Код: java
1.
2.
3.
4.
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 сейчас(Этот вариант прекрасно работает на одном комп, на другом нет).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@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;

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@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;

}



Весь стек-трейс закинуть не могу(так как рекурсия), но вот часть.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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]
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631041
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

Попробуйте заменить private на protected :
Код: java
1.
2.
3.
4.
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "objective_id")
@JsonIgnore
protected Objective objective;
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631050
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman_webdev_,

Попробуйте заменить private на protected :
Код: java
1.
2.
3.
4.
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "objective_id")
@JsonIgnore
protected Objective objective;

- к сожалению не помогло - та же ошибка.
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631058
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать с @JsonIgnoreProperties :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Entity
@Data
@JsonIgnoreProperties({"objective"})
public class Action {
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "objective_id")
    @JsonIgnore
    public Objective objective;
}
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631072
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падает JSON а вопрос почему-то про Hibernate.
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631079
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UsmanМожно попробовать с @JsonIgnoreProperties : - так же не работает, тем более, мне кажется поля в Entity должны быть приватными.

BlazkowiczПадает JSON а вопрос почему-то про Hibernate. - Но падает же при вытаскивании объекта. Не буду с Вами спорить, не компетентен. )))
Так сформулировалось. Буду благодарен за подсказку.
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631086
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

@JsonIgnore может не работать на приватном поле.
В Jackson 1.6 есть другие аннотации для обратной ссылки.
http://stackoverflow.com/questions/9037955/spring-mvc-json-infinite-recursion
Ну, и вообще
https://www.google.com/search?q=Could not write JSON: Infinite recursion (StackOverflowError)
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631094
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz_webdev_,

@JsonIgnore может не работать на приватном поле.
В Jackson 1.6 есть другие аннотации для обратной ссылки.
http://stackoverflow.com/questions/9037955/spring-mvc-json-infinite-recursion
Ну, и вообще
https://www.google.com/search?q=Could not write JSON: Infinite recursion (StackOverflowError)

Ну вы же заметили наверняка, что я пробовал различные варианты, и в гугла спрашивал. Вот например, сейчас поменял. Та же ошибка.


Код: java
1.
2.
3.
	 @JsonManagedReference
	@OneToMany(mappedBy = "objective", fetch = FetchType.EAGER, orphanRemoval = true)
	private List<Action> actions;



Код: java
1.
2.
3.
4.
	@JsonBackReference
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "objective_id")
	public Objective objective;
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631101
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

На свойство поставьте.
...
Рейтинг: 0 / 0
Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
    #38631122
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz_webdev_,

На свойство поставьте. - хмммм, теперь вылетает ошибка сохранения Action.
Я почему-то начинаю дальше читать и предполагать, что я неправильно сохраняю.
Я сохраняю отдельно Каждую сущность, насколько теперь понимаю, сохранять я должен только родителя? Сейчас

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	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;
	}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	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");
		}
	}



Никак не могу с этим разобраться...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: @OneToMany<->@ManyToOne - Рекурсия(Ошибка)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]