这是一个永无止境的故事:)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]等 –