与hibernate的父/子关系出现问题

我遇到了父子关系的问题。
Hibernate文档说在子类中添加“多对一”关系以从父级获取外键值。 但是为了使这种关系起作用,我必须在子类中添加Invoice属性,该子属性将父级循环包含在子级中并打破我的序列化程序。 有人可以指出我在哪里做错了吗?

这是我的代码:

Invoice.java

public class Invoice implements Serializable { private Long id; private Date invDate; private String customer; private Set items; ... getters/setters ... } 

InvoiceItem.java

 public class InvoiceItem implements Serializable { private Long itemId; private long productId; private int quantity; private double price; private Invoice invoice; //??????? ... getters/setters ... } 

Invoice.hbm.xml

            

InvoiceItem.hbm.xml

           

如果删除inverse =“true”属性,则不必在InvoiceItem中引用Invoice。 然后,Hibernate将创建一个单独的映射表,而不是在InvoiceItem表中使用外键。

删除InvoiceItem集上的inverse属性,并从InvoiceItem中删除Invoice属性,并在映射中删除相应的many-to-one属性,您应该得到您想要的。

或者,您可以将InvoiceItem中的Invoice引用标记为瞬态,并在反序列化期间处理填充值:迭代发票中的项目集,并将每个项目的invoice属性设置为拥有发票。