gpt4 book ai didi

java - 使用 native SQL 的 Hibernate 批处理

转载 作者:行者123 更新时间:2023-12-01 05:25:13 26 4
gpt4 key购买 nike

我有一个使用 hibernate 的应用程序。它的模块之一以批处理方式调用 native SQL (StoredProc)。大致来说,它的作用是每次写入文件时都会更新数据库中的字段。现在我不确定需要写入多少个文件,因为它取决于每天的事务数量,因此可能是零到一百万。

如果我在 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 吗?

我需要使用 session 刷新和清除吗? hibernate 教程中的示例使用的是 POJO,而不是 native sql,因此我不确定它是否也适用。

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

感谢您的宝贵时间,希望您能尽快回复。如果也可能的话,代码片段对我来说真的很有用。

<小时/>

应用程序工作流程

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

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

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

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

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

最佳答案

代码片段将为每次迭代打开和关闭 session ,这绝对不是一个好的做法。

您是否有一项工作可以检查文件夹中添加了多少新文件?

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

类似的事情会减少打开/关闭 session 连接的数量。应该比这个快得多。

关于java - 使用 native SQL 的 Hibernate 批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9785335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com