我正在尝试关联2个类,如下所示
用于描述的代码示例如下 账单等级
public class Bill {
@Id
@GeneratedValue(strategy = GenerationType.AUTO )
private long id;
private long billNumber;
private BillType billType;
@OneToOne
private Customer billCustomer;
//getter and setter omitted
}
和客户类的定义是
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String customerRef;
@OneToMany(fetch = FetchType.EAGER)
private List<Bill> customerBills;}
当我尝试使用条件API检索对象时,将重新关联相关对象。
Bill bill = (Bill) session.createCriteria(Bill.class)
.add(Restrictions.eq("billNumber", BILL_NUMBER)).uniqueResult();
当我验证与客户关联的账单大小时,它将重新归零。 (但是1个账单与客户相关)
Assert.assertEquals(1,bill.getBillCustomer().getCustomerBills().size());
(上述条件失败),但当我以其他方式验证时,它成功
List<Bill> billList = session.createCriteria(Customer.class)
.add(Restrictions.eq("customerRef",CUSTOMER_REF)).list();
Assert.assertEquals(1,billList.size());
我急切地装上了这些物品。我无法弄清楚我错过了什么?
答案 0 :(得分:1)
您的映射是错误的。如果关联是一对多双向关联,则一方必须将其定义为OneToMany
,将另一方定义为ManyToOne
(不是OneToOne
)。
此外,双向关联始终具有所有者方和反方。反面是具有mappedBy
属性的反面。在OneToMany的情况下,反面必须是一边。所以映射应该是:
@ManyToOne
private Customer billCustomer;
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "billCustomer")
private List<Bill> customerBills;
中描述