2013-06-12 65 views
0

我有以下Metamodels 2实体。JPA标准ManyToMany加入或不加入?

@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没有referene到SearchIn.Class。

我现在需要的是所有需要使用特定的searchString映射到SearchIn。我想使用标准api,但我无法弄清楚我需要哪个实体作为根,以及如何与其进行连接。我看到一些类似的其他问题,但不是真正我想要的,我没有得到它的工作:/

所以可以somone给我一个提示,并帮助我建立起来?

回答

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

+0

嗨,谢谢你的回答我的主要问题接缝是,我不明白如何得到认为出标准查询和它是如何执行的... 是否有可能得到一个查询,不仅得到的实体,但也有一些聚合?比如说某个特定的ID有多少次被发现拥有该条目,这是最重要的? –

+0

是的,你可以使用自定义类而不是实体: 检查章节“CriteriaBuilder的数组”和“CriteriaBuilder的构造”: http://www.objectdb.com/java/jpa/query/jpql/select 尽管object db对于普通的jpa/criteria api问题并不总是很好的来源,但是这似乎是正确的,并且与我使用的非常相似。 – tagtraeumer