我有几个场景,我认为从hibernate文档来看有些不清楚。
数据类:
class HibernateDao {
// ...
@Transactional
public void store(List<Object> batch) {
for(Object o : batch) {
hibernate.store(o);
}
}
}场景1
hibernate.jdbc.batch_size = 1Q1:使用10项集合调用store(..)时会发生什么?会有10x1的交易还是只有一个?
场景2
hibernate.jdbc.batch_size = 10Q2:使用1项集合调用store(..)时会发生什么?它是否会立即写入备份存储,而不管batch_size属性如何?
在hibernate文档中:
如果使用标识符生成器,Hibernate将禁用JDBC级别的插入批处理。
Q3:什么被归类为identify identifier generator,使用注释@Id和@GeneratedValue(strategy = GenerationType.AUTO)
发布于 2011-03-14 14:53:54
Q1:调用存储(..)时会发生什么?收集10件物品?会有10x1的交易还是只有一个?
这是特定于Spring事务的,但就Hibernate而言,如果您使用的是一个会话和一个“事务”,它将等待“刷新”或“提交”来实际执行这些操作。所以,一笔交易。
Q2:调用存储(..)时会发生什么?收集了1件物品?它是否会立即写入备份存储,而不管batch_size属性如何?
不是马上。与前面的响应相同的是:除非您明确要求进行“刷新”,否则Hibernate将在提交阶段执行此操作。
Q3:使用注释@Id和@GeneratedValue(strategy = GenerationType.AUTO),什么被归类为标识标识符生成器?
任何Hibernate无法预测的ID。例如,标识(如序列,但对于T数据库)、自动增量、序列、.原因很简单: Hibernate不知道每个批处理实体生成的ID是什么,所以插入后的实体状态与之前的状态不同。Hibernate通过调用用于"getGeneratedKeys“的JDBC方法来处理这一点,这允许它将来自数据库的数据与其会话中的数据同步,但无法对批处理进行同步。
如果Hibernate知道实体的ID是什么(即:分配,hilo,uuid,.)它可以安全地执行批处理执行。
https://stackoverflow.com/questions/5299955
复制相似问题