我有以下两个元模型的实体。
@StaticMetamodel(SearchIn.class)
public class SearchIn_ {
public static volatile SingularAttribute<SearchIn, Integer> id;
public static volatile SingularAttribute<SearchIn, String> searchString;
public static volatile SetAttribute<SearchIn, Take> takes;
// Other Attributes...
}
@StaticMetamodel(Take.class)
public class Take_ {
public static volatile SingularAttribute<Take, Integer> id;
// Other Attributes...
}
该关系是SearchIn.Class和Take.Class映射的ManyToMany,没有对SearchIn.Class的引用。
我现在需要的是所有映射到具有特定searchString的SearchIn的Take。我想使用条件api,但是我不知道我需要哪个实体作为Root,以及如何进行连接。我看到了一些其他类似的问题,但不是真正的我想要的东西,我没有让它起作用:/
那么somone可以给我一个提示,并帮助我增强这一点吗?
最佳答案
为什么不尝试简单的联接:
Root<SearchIn> root = criteriaQuery.from(SearchIn.class);
Join<SearchIn, Take> takeJoin = root.join(SearchIn_.takes);
criteriaQuery.where(builder.equal(root.get(SearchIn_.searchString), "bla"));
TypedQuery<SearchIn> typedQuery = entityManager.createQuery(criteriaQuery);
return typedQuery.getResultList();
您的返回值将是SearchIns列表。而您只是将getet称为Takes。
我还没有尝试过它是否正在运行。我只是从一些代码片段中复制了它。