Java设置差异,我可以使用java对象还是数据库?

标签 java mysql hibernate set set-difference

我需要获取两组整数(记录 ID)之间的差异。第一组存储在文本文件中,第二组存储在mysql数据库中。 我有两个选择:

1-从数据库读取所有id,将它们加载到java对象,从文本文件加载所有id并使用

Sets.difference(dbset, fileset);

2- 只读取文本文件 ids 并使用 Hql 查询来获取差异:

public List getDiff(Set<Integer> ids){
    Query query;
    query = getSession().createQuery("from myset s where s.id not in (:ids)");
    query.setParameterList("ids", ids);
    return query.list(); 
}

我发布这个问题是因为这些集合可能很大,而且我不知道 Hibernate/Mysql 查询是否有任何限制(Hibernate 将该查询翻译为“not in (1,2,3,... )) 否则,我可以轻松达到 jvm 内存限制。

最佳答案

选项 #2 将无法正常工作,因为它只提供不存在于文件 ID 中的信息。如果某些 ID 不在数据库中但在文件中,则您不会得到它的区别。 只有选项 #1 可以正确工作,而且对我来说看起来不错。唯一的问题是——内存力。但创建某种算法来完成这项工作并节省内存并不容易。如果你的ID号达到100000我就不用担心内存问题。

关于Java设置差异,我可以使用java对象还是数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280721/

相关文章:

mysql - DELPHI 用 ADO 查询的结果填充一个列表框

MySQL Innodb 由于行估计极其错误而无法使用索引

java - 自动出现 JTextField

java - 满足循环退出条件时执行的else语句

MySQL:从 SELECT 语句到 INSERT 语句

hibernate日志显示更新查询,但没有选择

java - Hibernate/MySQL 批量插入问题

java - 如何在 JSF (Primefaces) 中以编程方式设置咆哮生命周期?

java - 如何将 JComboBox(Object[] items) 添加到 jComboBox1.addItem(String items);

java - 如何指定一个字段,以便当我们查询时,使用该字段的 Joda LocalDate 或 LocalDateTime 值,将其映射到同一列?