【发布时间】: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