Java JPA规范:选择列表属性包含具有特定值的项的项
我试图用JPA规范解决以下问题: 考虑以下类别:Java JPA规范:选择列表属性包含具有特定值的项的项,java,spring-boot,jpa,Java,Spring Boot,Jpa,我试图用JPA规范解决以下问题: 考虑以下类别: public class Language { private String name; ... } public class Person { private List<Language> languages; ... } 公共类语言{ 私有字符串名称; ... } 公共阶层人士{ 私人名单语言; ... } 如何选择所有使用名称为x的语言的人员?我正在寻找一个使用CriteriaBuilder
public class Language {
private String name;
...
}
public class Person {
private List<Language> languages;
...
}
公共类语言{
私有字符串名称;
...
}
公共阶层人士{
私人名单语言;
...
}
如何选择所有使用名称为x
的语言的人员?我正在寻找一个使用CriteriaBuilder
的解决方案,它应该生成一个谓词
,我可以与其他谓词一起“and”
提前谢谢。其实很简单:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
ListJoin<Person, Language> langJoin = root.join(Person_.langs);
query.where(cb.equal(langJoin.get(Language_.name), lang));
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Person.class);
Root=query.from(Person.class);
ListJoin langJoin=root.join(Person.langs);
where(cb.equal(langJoin.get(Language.name),lang));
因此,您基本上通过相应的关联来连接语言,然后添加一个equals
谓词,将连接实体的必需属性与您的条件相匹配 谢谢,但它不应该是joinList
而不是join
?joinList
不是类型安全的,因为它依赖于关联的字符串名称。使用Root.join
并从实体元模型传入属性时,它将根据元模型属性类型自动返回相应的连接类型。在我们的例子中,Person.\uz.langs
是一个ListAttribute
,因此产生的连接是ListJoin
实例-只需查看所有重载的.join
方法。