Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中从数据库获取数据时如何限制重复性_Java_Mysql_Spring_Hibernate_Hql - Fatal编程技术网

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

Java 在hibernate中从数据库获取数据时如何限制重复性,java,mysql,spring,hibernate,hql,Java,Mysql,Spring,Hibernate,Hql,我正在使用hibernate从数据库中获取数据。我的数据库中有3个表,我为它们创建了3个实体类。我获取的结果基于两个标准:用户的职业和用户的城市 这是我的刀课 在这里,我根据专业从第一次查询中获取记录,但是如果结果小于10,那么我将根据城市运行第二次查询。 但是如果结果与两个标准都匹配,那么我会得到重复的结果,我不想要它。我想要的是,如果结果出现在第一个查询中,那么这些结果不会出现在第二个查询中。我是hql查询新手,请帮助我 Thanx Prevance如果您不想调整查询,可以采用以下方法 重写

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

这是我的刀课

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


Thanx Prevance

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

重写用户对象中的equals和hashcode,这样,如果两个用户对象的id相同,则可以将它们视为相同的对象

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

list.addAll(set)

在jozzy的回答和评论的基础上,您可以使用树集而不是哈希集,哈希集是SortedSet实现,它将使您的用户记录保持排序

所以应该是这样的,

Set<User> foo = new TreeSet<User>(yourList);

似乎您正在选择地址选择不同的。。也许你的意思是选择不同的美国。 假设您正在选择用户,在执行第一次查询后,您可以在列表中收集用户ID

List<Long> alreadyFoundUserIds = new ArrayList<>();
for(User user : foo){
    alreadyFoundUserIds.add(user.getId()); 
}

你不能用NOT IN子句吗?谢谢你的回复。。。但我无法使用NOT IN子句加入查询。。。你能做到这一点吗?但我将如何得到查询结果集。。。现在我得到了结果列表,比如list=query.list;Set foo=newhashsetyourlist;thanx@jozzy正常,但结果不是按顺序来的…我希望结果按顺序来,就像第一次查询的结果应该在顶部一样,如果记录少于10,那么第二次查询的结果应该在底部。但是在添加两个结果之后,我得到了10多个结果,而我只希望得到10个好的thanx作为您的答复。但是怎么能呢我只返回10条记录..我在列表中得到的结果超过了10个不可能超过10个,第一个查询将返回最大值10,第二个查询将返回最大值10 firstqueryResultSize..例如,如果第一个查询返回3,第二个查询返回10-3=7,所以总数是3+7=10。实际上,我现在正在使用Set,当我将两个列表传递给Set时,结果中的重复性被删除,结果小于10,我有另一个问题。。。我正在将哪个id传递到gwt结果的url中我在结果中也得到了那个id记录。。。我怎么才能删除它呢?我想你必须为GWT发布另一个问题,它与hibernate无关,像这个问题一样的sql。我对gwt一无所知。
List<Long> alreadyFoundUserIds = new ArrayList<>();
for(User user : foo){
    alreadyFoundUserIds.add(user.getId()); 
}
   String queryString1 = "SELECT DISTINCT u 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
 AND u.id NOT IN (:alreadyFoundUserIds )   ";

        query1 = session.createQuery(queryString1);
        query1.setLong("id", id);
        query1.setParameterList("alreadyFoundUserIds ", alreadyFoundUserIds ); 
        query1.setMaxResults(10 - alreadyFoundUserIds.size());