這是一個永無止境的故事:)JPA一對多的關係問題
我看了很多帖子和文檔的這個話題,我還是真的不明白髮生了什麼那裏。
我有一個孩子:
@Entity
public class Offer implements Serializable {
...
@JsonManagedReference
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(nullable = false, name = "provider_id")
private Provider provider;
和家長:
@Entity
public class Provider implements Serializable {
...
@JsonBackReference
@OneToMany(fetch = FetchType.LAZY, mappedBy = "provider")
private List<Offer> offers;
如果我把它providerRep.findAll()
導致死循環。
如果我刪除mappedBy="provider"
它的工作原理。但我不能保存優惠作爲提供者的孩子。
如何配置它正確? (無環)
我如何保存收購建議提供直的孩子,而無需將其添加到供應商並保存提供者...(它甚至有可能?)
的工作流程很容易: 我創造&保存提供者。然後爲提供商節省大量優惠。所以沒有cascading.PERSIST是必要的。
希望你能幫助我理解我的問題。特別是這個「mappedBy」和JoinColumn點讓我困惑。
編輯:
上調用offerRepo.getOne():
2017-09-15 10:56:23.357 WARN 14128 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver :
Failed to write HTTP message: org.springframework.http.converter.Http
MessageNotWritableException:
Could not write JSON:
Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Infinite recursion (StackOverflowError) (through reference chain: de.gaudiamo.content.entities.Provider_$$_jvstc64_7["offers"]->org.hibernate.collection.internal.PersistentBag
一個「死循環」,你不顯示。在JSON中?或在JPA?因爲它們是完全不同的API。 – DN1
在JSON(傑克遜)。我所看到的是無盡的堆棧。 –
...'at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)〜[jackson-databind-2.8.9.jar:2.8.9] at com.fasterxml。傑克遜數據綁定-2.8.9.jar:2.8.9]等 –