0

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

@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 映射的 ManyToMany,而 Take.Class 没有 SearchIn.Class 的引用。

我现在需要的是所有使用特定搜索字符串映射到 SearchIn 的 Take。我想使用标准 api,但我不知道我需要哪个实体作为 Root 以及如何使用它进行连接。我看到了一些其他类似的问题,但不是我想要的,我没有让它工作:/

那么有人可以给我一个提示并帮助我建立这个吗?

4

1 回答 1

2

你为什么不尝试一个简单的连接:

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 列表。你只需为你的 Takes 调用 getet。如果它正在运行,我还没有尝试过。我只是从我的一些代码片段中复制了它。

于 2013-06-21T07:09:53.933 回答