用例是:
我使用JPA / Hibernate找到的唯一有效的解决方案是执行以下步骤。原因是hibernate将实体保留在第一级缓存中,直到事务结束。
这样做的开销是
真正的期望是JPA或者至少Hibernate会暴露某种功能,以便快速创建一个实体并坚持下去而不保持其管理。
其他解决方案:
所以问题是:是否有可能在同一时间坚持和分离,甚至更好地坚持而不被管理?
答案 0 :(得分:1)
您可以使用没有第一级缓存的无状态会话。 来自文档:
StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
ScrollableResults customers = session.getNamedQuery("GetCustomers")
.scroll(ScrollMode.FORWARD_ONLY);
while ( customers.next() ) {
Customer customer = (Customer) customers.get(0);
customer.updateStuff(...);
session.update(customer);
}
tx.commit();
session.close();
在此代码示例中,查询返回的Customer实例是 立刻脱离了。它们永远不会与任何持久性相关联 上下文。
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html