我有一個使用休眠的應用程序。其中一個模塊在批處理過程中調用本地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