java - CriteriaBuilder 和实体列表的 isMember (Hibernate)

标签 java hibernate jpa criteriaquery

好吧,我正在尝试做一些很奇怪的事情。我正在尝试使用 CriteriaBuilder 和 CriteriaQuery 返回实体集合中包含给定对象的所有实体。我已经为此绞尽脑汁好几个小时了,相关文档很少而且不是特别有用。任何帮助将不胜感激。

相关类(class)摘录如下。

@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 。这是一个可怕的未注释的困惑。

最佳答案

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

关于java - CriteriaBuilder 和实体列表的 isMember (Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982058/

相关文章:

java - 为什么 UCanAccess 需要密码而 Jackcess 不需要?

java - Hibernate 中没有鉴别器列的按层次结构表策略

java - 使用 java 从奇怪但有效的 url 获取域

java - 有没有办法判断一个类是否为 java6 编译?

java - 非法参数异常 : expecting IdClass mapping

java - Hibernate @Filter注解的使用

mysql - JPA,已经持久化的对象给出 "a new object was found through a relationship that was not marked cascade PERSIST"

mysql - 我可以将 @Where 注释与 @ManytoOne 关联一起使用吗?

java - ManyToOne 双向关系中 POST 请求上的 org.hibernate.exception.ConstraintViolationException

java - 如何使角组件在 JScrollPane 中始终可见