java - Java + Hibernate中对象的匹配算法

标签 java mysql spring algorithm hibernate

我正在使用 Spring MVC 和 Hibernate 编写一个应用程序,正在研究它。我有 12 个变量的对象 Person。任务是从数据库中找到与可比对象最匹配的现有对象 Person。例如 inputPerson_1 匹配 databasePerson_423 的 9 个变量是 75% 匹配。

我有以下想法,但它看起来对数据库来说非常过载,而且显然是一个薄弱的解决方案:

1) 对 MySQL 创建 12 个连续查询以收集所有可能的匹配对象并保存到 HashSet,其中第一个参数将是 Person ID

query = session.createQuery("from Person where lower(firstName) like :inputFirstName) 
query = session.createQuery("from Person where lower(lastName) like :inputLastName) 
...

2) 创建 int max 并逐一比较 HashSet 中对象的变量。返回匹配度最高的对象。

最好的选择是什么?也许有一些现成的解决方案?

最佳答案

我只会执行一个数据库查询,该查询会搜索是否有任何属性匹配。

然后我会编写一个函数,为每个人计算有多少属性匹配并返回最佳匹配值。

然后您可以为您的最佳匹配值排序列表。

当然,解决问题的方法有无数种,每种方法都有自己的优点和缺点。

因此,以下是我建议的解决方案的优缺点:

专业人士:

  • 您与数据库的交互较少。 => 它应该比答案中的解决方案更快。
  • 您对最佳匹配的计算非常灵活。这是一个功能,您可以在其中检查和计算您想要的一切。

缺点:

  • 您在不同的地方有两个部分必须同步。搜索所有条件的数据库查询和检查相同属性的计算功能。 => 隐藏契约和耦合

  • 如果搜索条件将返回大量条目,则此解决方案不适合。然后你必须以某种方式计算数据库中的因子,你需要使用与顺序和限制一起工作的索引,所以你不会返回所有行并且有一个 O(log(n)) 的努力类。

关于java - Java + Hibernate中对象的匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338523/

相关文章:

mysql - 使用 Django 保存 mysql 数据

c# - PHP 命令 mysql_insert_id() 的等效 C#/SQLite 命令?

java - 使用MultiPart上传图片

java - 指定目标命名空间?

mysql - 来自同一个表的多个 MySQL 查询

Java 数组初始化保证

spring - 是否可以避免自定义 @Query 的类型转换?

java - Spring中SMTP邮件程序的配置

java - 使用 Tomcat 允许子域 session cookie 的最佳方式

Java FileDialog 以编程方式设置大小