CriteriaBuilder和isBmber实体列表(Hibernate)

时间:2012-12-20 23:17:21

标签: java hibernate jpa criteriaquery

好的,我正在尝试做一些非常奇怪的事情。我正在尝试使用CriteriaBuilder和CriteriaQuery来返回包含实体集合中给定对象的所有实体。几个小时以来我一直在反对这个问题,而且相关的文档很少,而且不是特别有用。任何帮助将不胜感激。

课程的相关摘录如下。

@Entity
public class Entry {
    @ManyToMany(fetch=FetchType.EAGER)
    private List<Tag> tags = new ArrayList<Tag>();
}

@Entity
public class Tag {
    @Size(min=1,max=63)
    @Column(unique=true)
    @NotNull
    private String name;
}

@Repository
@Transactional
public class EntryDaoImpl extends RefineableDao implements EntryDao{
    @Autowired
    private EntityManager em;

    @Override
    public List<Entry> search(final Map<String,Object> refinement){
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Entry> query = cb.createQuery(Entry.class);
        Root<Entry> entry = query.from(Entry.class);
        query.orderBy(cb.desc(entry.get("createTime")));
        query.select(entry);
        query.where(this.refineQuery(refinement, cb, query, entry));
        return em.createQuery(query).getResultList();
    }
}

基本上,我需要能够找到包含给定标签的条目。我知道如果这是我正在做的唯一改进,这可以很简单地完成,但是对于相同的CriteriaQuery还有很多其他的改进,我从来没有保证将要进行哪些改进。

如果您确实需要了解后端,请查看http://pastebin.com/QJnkYRRh。这是一个可怕的未评论的混乱。

1 个答案:

答案 0 :(得分:1)

好。我找到了答案,为什么我遇到了CriteriaBuilder.isMember()的问题。问题是Path需要Path<? extends Collection>。有了这个,isMember()就像我希望的那样工作。