gpt4 book ai didi

java - 使用 hibernate 检查数据库重复的优化方法

转载 作者:行者123 更新时间:2023-11-29 11:03:14 26 4
gpt4 key购买 nike

我目前正在开发一个程序,该程序使用 Spring 和 Hibernate 每 31 秒检索一次数据(Spring 计划服务)并保存到 mysql 表(Hibernate)。

我目前有一个 HashMap 正在检查检索到的数据。如果检索到的数据在 HashMap 中,则使用该实例。如果数据不在HashMap中,则将其添加到HashMap中并通过Hibernate保存这个新条目。

我对这个设计唯一关心的是,由于这是一个每 31 秒运行一次的 Spring 调度服务,HashMap 对象也会每 31 秒重新创建一次。在这种情况下,之前添加到 HashMap 的任何条目将不再存在。 ,重复的条目将保存到表中。

我想出了两种方法来解决这个问题:

  1. 查询表中的所有当前条目,并使用它们填充 HashMap,然后使用 HashMap 检查检索到的新数据。这样,HashMap 即使每 31 秒重新创建一次,仍然拥有所有唯一的条目。

  2. 根据表中的所有条目查询刚刚传入的新数据。这样就不需要HashMap了。每当有新数据进来时,只需通过查询将其与所有条目进行检查即可。

随着表中的条目数越来越大,这两种方式哪一种更优化?也请随意提出任何替代方法来做到这一点。谢谢。

我的代码:

@Scheduled(fixedRate = 31000)
public void saveCompanyData() {

// Retrieve data from online into Data
...
...

// Hibernate
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Company.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();

// Create HashMap
HashMap<String, Company> companyMap = new HashMap<>();

// Save to table if key not mapped
String companyKey = Data.getCompanyName();
Company company;
if(companyMap.containsKey(companyKey)){
company = companyMap.get(companyKey);
} else {
company = new company(Data.getCompanyName());
companyMap.put(companyKey, company);
session.save(company);
}

// Commit
session.getTransaction().commit();

最佳答案

第二个听起来很公平。另外,给定的代码没有任何意义,因为 companyMap 将始终为空,因此 contains 将始终为 false。

此外,正如您在这里提到的优化一样,您不应该每次想要使用它时都创建实体工厂,因为这是昂贵的操作。它应该只创建一次,很可能是在应用程序启动时创建,除非您有一些奇特的流程允许在运行时更改 hiberate.cfg

关于java - 使用 hibernate 检查数据库重复的优化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41861651/

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