我有两个双向映射@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
无法保存,所以我继续为它创建了一个存储库接口。 这没有任何帮助。
答案 0 :(得分:2)
我刚刚发现了问题所在。我从cascade = CascadeType.ALL
实体中的Entry
选项开始,但稍后将其删除,忘记将其删回。我甚至不知道这是保存子对象所依赖的。所以,经验教训,我希望其他人认为这有用。