小编典典

在这种情况下是否有必要调用flush()(JPA接口)?

hibernate

因为调用flush()获取每个实体都从内存持久到数据库。因此,如果我使用过多的不必要的flush()调用,可能会花费很多时间,因此对于性能而言不是一个好的选择。这是一种我不知道何时调用flush()的情况?

//Order and Item have Bidirectional Relationships
Order ord = New ord("my first order");
Item item = New Item("tv",10);

//...process item and ord object

em.persist(ord);//em is an instance of EntityManager
em.flush();// No.1 flush()

item.setOrder(ord);
em.persist(item);

Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);

em.flush();// No.2 flush()

我的问题是:是否可以避免调用No.1同花顺?

我担心的事情是:为了执行 item.setOrder(ord) ,我们需要ord的数据库ID。而且仅调用 em.persist(ord)
无法生成数据库ID,因此我必须在 item.setOrder(ord) 之前调用 em.flush( 。那么,您对此有何看法?

提前致谢。


阅读 658

收藏
2020-06-20

共1个答案

小编典典

我应该先构造结构,然后再保留所有内容。

Order ord = New ord("my first order");
Item item = New Item("tv",10);

item.setOrder(ord);

Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);

em.persist(ord);

这样,您可以在一次调用中保留整个树,并且不需要刷新。

在良好的对象设计中,您应该使用duffymo所述的方法来连接对象。

2020-06-20