Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 构建CriteriaBuilder查询以比较列表_Java_Sql_Jpa_Criteria_Criteria Api - Fatal编程技术网

Java 构建CriteriaBuilder查询以比较列表

Java 构建CriteriaBuilder查询以比较列表,java,sql,jpa,criteria,criteria-api,Java,Sql,Jpa,Criteria,Criteria Api,如何比较数据库表中的列表和程序代码中的列表 该数据库具有具有技能的用户配置文件 @ManyToMany(cascade={CascadeType.MERGE},fetch=FetchType.EAGER) @JoinTable(name=“profile\u skills”, joinColumns=@JoinColumn(name=“profile\u id”,referencedColumnName=“id”), inverseJoinColumns=@JoinColumn(name=“sk

如何比较数据库表中的列表和程序代码中的列表
该数据库具有具有技能的用户配置文件

@ManyToMany(cascade={CascadeType.MERGE},fetch=FetchType.EAGER)
@JoinTable(name=“profile\u skills”,
joinColumns=@JoinColumn(name=“profile\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“skill\u id”,referencedColumnName=“id”))
私有地图技能=新树形图();
需要找到具有正确技能的用户配置文件
我提出了一个请求,但他选择了至少有一个匹配列表中任何技能的配置文件。但是,我只需要选择那些具有列表中所示的所有技能的技能(与列表中的所有元素匹配)

CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Profile.class);
Root=cq.from(Profile.class);
MapJoin-skillMapJoin=root.join(Profile.skills);
表达式nameSkill=skillMapJoin.get(Skill.name);
List skills=Arrays.asList(“Java”、“JavaScript”);
cq.where(nameSkill.in(skills)).groupBy(root.get(Profile.id));
TypedQuery q=em.createQuery(cq);
列表配置文件=q.getResultList();
例如:
简介1.技能:“Java”、“Scala”、“Groovy”、“JavaScript”
简介2.技能:“Java”、“Scala”、“Groovy”
简介3.技能:“Groovy”、“JavaScript”

我的查询返回结果:Profile1、Profile2、Profile3
必须有一个结果:Profile1

请告诉我如何实现我需要的请求?
如何比较数据库表中的列表和程序代码中的列表?

不仅可以使用CriteriaBuilder,还可以使用sql或jpql等其他查询选项。

我找到了一个解决方案,尽管我认为可以采用不同的方法

CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Profile.class);
Root=cq.from(Profile.class);
MapJoin-skillMapJoin=root.join(Profile.skills);
表达式nameSkill=skillMapJoin.get(Skill.name);
List skills=Arrays.asList(“Java”、“JavaScript”);
整数sizeListValue=skills.size();
表达式countSkills=cb.count(exp);
cq.where(技能)
.groupBy(root.get(Profile.id))
.具有(cb.equal(countSkills,sizeListValue));
TypedQuery q=em.createQuery(cq);
列表配置文件=q.getResultList();