私は現在、SpringとHibernateを使用して31秒ごとにデータを取得しています(スケジュールされたサービスをSpring)し、mysqlテーブル(Hibernate)に保存しています。重複した値が春の休止状態に格納されないようにする正しい方法
現在、取得したデータをチェックしているHashMapがあります。取得したデータがHashMap内にある場合は、そのインスタンスを使用します。データがHashMapにない場合は、HashMapに追加し、Hibernateを介してこの新しいエントリを保存します。
これは、31秒ごとに実行されるSpringスケジュールサービスなので、HashMapオブジェクトも31秒ごとに再作成されますか?その場合、以前に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();