我有以下两个元模型的实体。

@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。
我还没有尝试过它是否正在运行。我只是从一些代码片段中复制了它。

09-10 03:09