zapętlanie się encji

0

cześć,

mam api a w nim encje



public class Aaa {
	...

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "BBB_ID")
	private Bbb bbb;
}

public class Bbb {
	...
	
	@OneToMany(mappedBy = "bbb", cascade = CascadeType.ALL, orphanRemoval = true)
	private List<Ccc> ccc;
}

public class Ccc {
	...
	
	@ManyToOne
	@JoinColumn(name="BBB_ID")
	private Bbb bbb;
}

mam tez mappera

public class AaaMapper extends AbstractMapper<Aaa, AaaResultDTO, AaaDTO, AaaDTO> {
	@Override
	public void configure() {
		entityClass = Aaa.class;
		resultDtoClass = AaaResultDTO.class;
	}
}

po pobraniu

Aaa aaa = aaaDAO.getById(id);
 aaaMapper.toDTO(aaa);

dostaje

Infinite recursion (StackOverflowError) (through reference chain: backend.entities.Bbb_$$_jvst751_5["ccc"]->org.hibernate.collection.internal.PersistentBag[0]-...

pewnie dlatego że Bbb zapętla się z Ccc tylko nie wiem jak to naprawić? dałem tez @JsonIgnore na polu bbb w klasie Ccc ale to nie pomogło

0

Dostaje wtedy:

No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain

0

Wynika z tego, że chcesz na DTO zamienić obiekt, który ma niezainicjalizowane (lazy loading) pole. Więc musiałbyś dociągnąć te kolekcje, które chcesz przedstawić w jsonie.

0

w którym miejscu musiałbym to zrobić?

0

Po

Aaa aaa = aaaDAO.getById(id);

i przed

 aaaMapper.toDTO(aaa);
0

hmm tylko jak to zrobić
bo dałem tak ale nie działa tzn znowu zwraca ten ostatni błąd

Aaa aaa = aaaDAO.getById(id);
Integer id = aaaDAO.getBbb().getId();

chyba ze jakoś inaczej musze to zrobić?

0

A w tym BBB nie masz jeszcze CCC? co dałeś na ignorowane a co chcesz mieć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1