gpt4 book ai didi

java - 在 hibernate 中从数据库获取数据时如何限制重复

转载 作者:行者123 更新时间:2023-11-29 01:38:45 25 4
gpt4 key购买 nike

我正在使用 hibernate 从数据库中获取数据。我的数据库中有 3 个表,我为它们创建了 3 个实体类。我正在根据用户的职业和用户的城市这两个标准获取结果。

这是我的DAO

    @SuppressWarnings({ "unchecked", "null" })
public List<User> getUsersWithSameProfessionsById(long id) throws Exception {
session = sessionFactory.openSession();
String queryString = "SELECT DISTINCT a FROM Profession p1, Profession p2, Address a JOIN p2.user u WHERE p1.u_id=:id AND p2.profession=p1.profession AND a.uid=u.id";
Query query = session.createQuery(queryString);
query.setLong("id", id);
query.setMaxResults(10);

Set<User> foo = new HashSet<User>(query.list());

Set<User> foo1 = new HashSet<User>();

Query query1=null;
if(professionList.size()<10){

String queryString1 = "SELECT DISTINCT a FROM Address c1, Address c2, Address a JOIN c2.user u WHERE c1.uid=:id AND c2.city=c1.city AND a.uid=u.id";
query1 = session.createQuery(queryString1);
query1.setLong("id", id);

foo1.addAll(query1.list());

}

List<User> professionList3 = new ArrayList<User>();
Set<User> foo2 = new HashSet<User>();
foo2.addAll(foo);
foo2.addAll(foo1);
professionList3.addAll(foo2);

return professionList3;
}

在这里,我根据职业从第一个查询中获取记录,但如果结果小于 10,那么我将根据城市运行第二个查询。但是,如果结果与两个条件都匹配,那么我会得到重复的结果,我不想要它..我想如果结果已经出现在第一个查询中,那么这些结果不会出现在第二个查询中。我是 hql 查询的新手,所以请帮助我。

提前致谢

最佳答案

如果您不想调整查询,可以采用以下方法

覆盖用户对象中的 equals 和 hashcode,这样如果两个用户对象的 ID 相同,您就可以将其视为相同。

使用 Set 来保存您的数据。重复项将被丢弃。最后返回集合或简单地将集合转换为列表

list.addAll(set)

关于java - 在 hibernate 中从数据库获取数据时如何限制重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090278/

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