java - 在这种情况下是否需要调用 flush() (JPA 接口(interface))?

标签 java hibernate jpa flush entitymanager

因为调用 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()

我的问题是:是否可以避免跟注一号同花?

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

提前致谢。

最佳答案

我应该先构建结构,然后持久化所有内容。

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 描述的方式来连接您的对象。

关于java - 在这种情况下是否需要调用 flush() (JPA 接口(interface))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949427/

相关文章:

postgresql - Spring数据原生查询不允许Postgres jsonb字符串存在操作符(问号)

java - 无法创建外键

hibernate - 如何查询以二进制形式存储在数据库中的 UUID(JPA/Hibernate/MySQL)

java - hibernate3 maven 插件 :make hbm2java generate hibernate annotations instead of ejb3 annotations

java - 如何使用IAdaptable类创建工作集? [Eclipse 插件]

JavaEE - 无效类异常

java - 找到给定数组的一维峰

java - Jadira 6.0 与 Hibernate 4.3 集成

java - 从字符串生成 key (com.google.appengine.api.datastore.Key)

java - XStream - com.thoughtworks.xstream.converters.ConversionException