我有一个使用休眠的应用程序。其中一个模块在批处理过程中调用本地SQL(StoredProc)。它所做的大概是每次写入文件时都会更新数据库中的一个字段。现在我不确定需要写多少个文件,因为它取决于每天的交易次数,因此可能为零到一百万。使用本机SQL进行休眠批处理
如果我在while循环中使用这段代码片段会有什么问题吗?
@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,因此我不确定它是否也适用。
请注意应用程序的另一部分已经使用休眠,因此尽可能多地我想坚持使用休眠。
谢谢你的时间,我希望你的快速回复。如果代码片段也可能真的对我有用。
应用工作流
1)数据库查询的交易信息。 (交易日期,账户类型,货币等。)
2)对于每个账户进程的交易信息。 (折扣,当前余额等)
3)将交易信息和处理后的信息写入文件。
4)更新基于过程信息
5)的数据库字段返回到步骤2,而其仍是帐户。 (假设没有抛出异常)
Bump !!任何人有任何其他想法? – 2012-03-23 10:12:37
凹凸!任何人都可以回答关于批量大小,二级缓存,会话刷新/清除的问题! – 2012-03-27 07:24:32