双向@OneToMany映射对象(父和子):父得到保存,子没有

时间:2017-04-12 20:37:31

标签: java jpa spring-data hibernate-mapping hibernate-onetomany

我有两个双向映射@OneToMany(我猜这是正确的方法):

@Entity
@Table(name="entry")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Entry {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @Column(unique=true)
    private String name;

    @OneToMany(mappedBy = "entry", fetch=FetchType.EAGER)
    @JsonManagedReference
//    @JsonIdentityReference(alwaysAsId=true)
    private List<Address> addresses = new ArrayList<>();

    .....
}

@Entity
@Table(name="address")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Null
    private String line1;

    @Null
    private String line2;

    @ManyToOne
    @JoinColumn(name = "entry_id")
    @JsonBackReference
    private Entry entry;

    ....

}

当我在发送保存之前调试对象(Entry)时,我可以看到它包含ArrayList es的数组(Address类型) 。但是,该地址列表中的每个(此时唯一)元素都包含Entry作为其属性,依此类推 - 它们是无限嵌套的。

注意:在这种情况下,Entry仍然没有分配id。所以我先尝试persist(entry),然后address.add(entry),最后flush()对于下面说的是真正的问题,没有帮助

我的问题是:这是正常的吗?

我问,因为当我保存Entry对象时,只创建了父(Entry)记录,而Address则没有。Address。我甚至怀疑pdfocr -i input.pdf -o output.pdf 无法保存,所以我继续为它创建了一个存储库接口。 这没有任何帮助

1 个答案:

答案 0 :(得分:2)

我刚刚发现了问题所在。我从cascade = CascadeType.ALL实体中的Entry选项开始,但稍后将其删除,忘记将其删回。我甚至不知道这是保存子对象所依赖的。所以,经验教训,我希望其他人认为这有用。