【问题标题】:Hibernate Batch Processing Using Native SQL使用本机 SQL 的 Hibernate 批处理
【发布时间】:2012-03-20 10:51:37
【问题描述】:

我有一个使用休眠的应用程序。它的一个模块在批处理中调用本机 SQL (StoredProc)。它的大致作用是每次写入文件时都会更新数据库中的字段。现在我不确定需要写入多少文件,因为它取决于每天的交易数量,所以它可能是零到一百万。

如果我在while循环中使用这段代码sn-p会不会有什么问题?

@Transactional
public void test()
{
  //The for loop represents a list of records that needs to be processed.
   for (int i = 0; i < 1000000; i++ )
   {

   //Process the records and write the information into a file.
   ...

   //Update a field(s) in the database using a stored procedure based on the processed information. 
   updateField(String.valueOf(i));


   }
}

@Transactional(propagation=propagation.MANDATORY)    
public void updateField(String value)
{ 

Session session = getSession();

SQLQuery sqlQuery = session.createSQLQuery("exec spUpdate :value");

sqlQuery.setParameter("value", value);

sqlQuery.executeUpdate();

}

我的数据源和事务管理器是否需要任何其他配置?

是否需要设置 hibernate.jdbc.batch_size 和 hibernate.cache.use_second_level_cache?

我需要为此使用会话刷新和清除吗? hibernate 教程中的示例使用的是 POJO,而不是原生 sql,所以我不确定它是否也适用。

请注意应用程序的另一部分已经在使用休眠,因此我想尽可能坚持使用休眠。

感谢您抽出宝贵时间,希望您能快速回复。如果也有可能,代码 sn-p 对我真的很有用。


申请工作流程

1) 查询数据库获取交易信息。 (交易日期、账户类型、币种等)

2) 为每个账户处理交易信息。 (折扣、当前余额等)

3) 将交易信息和处理后的信息写入文件。

4) 根据流程信息更新数据库字段

5) 当他们仍然是帐户时,返回第 2 步。 (假设没有抛出异常)

【问题讨论】:

  • 撞!!有人有其他想法吗?
  • 撞!谁能回答关于批量大小、二级缓存、会话刷新/清除的问题!!!

标签: java sql hibernate batch-processing


【解决方案1】:

代码 sn-p 将为每次迭代打开和关闭会话,这绝对不是一个好习惯。

有没有可能,您有一份工作来检查文件夹中添加了多少新文件?

该作业应该每 15/25 分钟运行一次,检查过去 15/25 分钟内更改/添加了多少文件,并批量更新数据库。

这样的事情会减少打开/关闭会话连接的数量。它应该比这快得多。

【讨论】:

  • 您好,感谢您的回复。我更新了我的问题以更好地展示我的应用程序。除了您的建议之外,我还需要做任何其他更改,例如对事务管理器的配置、会话刷新/清除等。再次感谢您的帮助
  • 如果你使用 Hibernate 和 Spring JDBC,那么 Spring 支持声明式事务管理。您可以在哪里定义, 1. 事务管理器,您希望使用哪些方法进行事务。 2.TransactionProxyFactoryBean,针对你的DAO类所以,你实际上将使用TransactionProxyFactoryBean的bean而不是你自己的DAO。这将围绕你的 DAO 创建一个代理。希望这会有所帮助。
  • 再次感谢您的回复。对不起,如果我对你的问题不清楚。实际上我要问的是,如果事务管理器像 hibernate.jdbc.batch_size 并禁用 hibernate.cache.use_second_level_cache,我是否还需要添加额外的配置来休眠。我还需要在更新时使用 flush 和 clear 方法吗?就像这里显示的一样 [docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html],因为本教程只显示 pojos,我不确定它是否适用于本机 sql。感谢您的宝贵时间...
猜你喜欢
  • 2013-07-30
  • 2012-10-31
  • 2020-12-05
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 2018-11-21
  • 2014-03-09
  • 2014-05-31
相关资源
最近更新 更多