好的,我正在尝试做一些非常奇怪的事情。我正在尝试使用 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。这是一个可怕的没有评论的混乱。