JPA OneToMany关系问题

时间:2017-09-15 08:22:44

标签: json jackson

这是一个永无止境的故事:)

我在这个主题上阅读了很多帖子和文档,但我仍然不了解那里发生的事情。

我有一个孩子:

@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"它有效。但我不能保留提议作为提供者的孩子。

如何正确配置? (没有循环)

如何直接将商品保存为提供商的子服务,而无需将其添加到提供商并保存提供商......(甚至可以吗?)

工作流程很简单: 我创造了&amp;保存提供者。然后为提供商节省很多优惠。所以没有cascading.PERSIST是必要的。

希望你能帮我理解我的问题。特别是这个&#34; mappedBy&#34;和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

2 个答案:

答案 0 :(得分:0)

尝试将@JsonBackReference更改为@JsonIgnore

答案 1 :(得分:0)

好的..我找到了某种解决方案。意见欢迎!

设置孩子:

public class Offer implements Serializable {
..
    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.REFRESH})
    @JoinColumn(nullable = false, name = "provider_id")
    private Provider provider;

和父母:

public class Provider implements Serializable {
...
    @JsonManagedReference
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "provider", cascade = {CascadeType.MERGE, CascadeType.REFRESH}) //mappedBy= referenz attribute name in Offer
    private List<Offer> offers;

和POM:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.1</version>
        </dependency>

!请注意,我在子级和父级中切换了@JsonManagedReference@JsonBackReference! (我仍然不确定这些符号是如何工作的)

我有点担心以后会遇到几个问题。 我打开任何提示。

由于 格里