首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Hibernate 5中不推荐使用的createCriteria方法

Hibernate 5中不推荐使用的createCriteria方法
EN

Stack Overflow用户
提问于 2016-11-21 20:58:33
回答 4查看 65.6K关注 0票数 76

此调用已弃用:

代码语言:javascript
复制
session.createCriteria(Bus.class).list();

在源文件中,我可以看到:

代码语言:javascript
复制
/** @deprecated */
@Deprecated
Criteria createCriteria(Class var1);

/** @deprecated */
@Deprecated
Criteria createCriteria(Class var1, String var2);

/** @deprecated */
@Deprecated
Criteria createCriteria(String var1);

/** @deprecated */
@Deprecated
Criteria createCriteria(String var1, String var2);

但是我不明白我必须使用哪种方法来代替createCriteria

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-21 21:06:54

您可以在Hibernate 5.2 +中使用以下接口:

代码语言:javascript
复制
javax.persistence.criteria.CriteriaBuilder
javax.persistence.criteria.CriteriaQuery

// Create CriteriaBuilder
CriteriaBuilder builder = session.getCriteriaBuilder();

// Create CriteriaQuery
CriteriaQuery<YourClass> criteria = builder.createQuery(YourClass.class);
票数 93
EN

Stack Overflow用户

发布于 2018-05-01 18:03:14

出于安全原因,我使用了以下方法,更改了对象名称:

代码语言:javascript
复制
public List<MyObject> listAllForIds(List<Long> ids) {
    Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(MyObject.class)
            .createAlias("joinObject", "joinObject")
            .add(Restrictions.not(Restrictions.like("name", "string1", MatchMode.END)))
            .add(Restrictions.not(Restrictions.like("name", "string2", MatchMode.END)))
            .add(Restrictions.in("joinObject.id", ids));

    return criteria.list();
}

将其更改为使用:

代码语言:javascript
复制
javax.persistence.criteria.CriteriaBuilder
javax.persistence.criteria.CriteriaQuery

查询如下所示:

代码语言:javascript
复制
public List<MyObject> listAllForIds(List<Long> ids) {

    CriteriaBuilder builder = getSessionFactory().getCurrentSession().getCriteriaBuilder();
    CriteriaQuery<MyObject> criteria = builder.createQuery(MyObject.class);
    Root<MyObject> myObjectRoot = criteria.from(MyObject.class);
    Join<MyObject, JoinObject> joinObject = myObjectRoot.join("joinObject");

    Predicate likeRestriction = builder.and(
            builder.notLike( myObjectRoot.get("name"), "%string1"),
            builder.notLike( myObjectRoot.get("name"), "%string2")
    );

    criteria.select(myObjectRoot).where(joinObject.get("id").in(ids), likeRestriction);

    TypedQuery<MyObject> query = getSessionFactory().getCurrentSession().createQuery(criteria);

    return query.getResultList();
}

希望对其他人有所帮助,请随时提出改进代码的建议。

票数 18
EN

Stack Overflow用户

发布于 2018-03-21 21:29:35

添加截至2018年3月的答案。

依赖关系:

代码语言:javascript
复制
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;

import javax.persistence.criteria.CriteriaQuery;
import java.util.List;



public static List<Contact> fecthAllContacts() {
        Session session = sessionFactory.openSession();

        // create Criteria
        CriteriaQuery<Contact> criteriaQuery = session.getCriteriaBuilder().createQuery(Contact.class);
        criteriaQuery.from(Contact.class);

        List<Contact> contacts = session.createQuery(criteriaQuery).getResultList();
        session.close();

        return contacts;
    }

sessionFactory是:

代码语言:javascript
复制
public static SessionFactory buildSessionFactory() {
        final ServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
        return new MetadataSources(registry).buildMetadata().buildSessionFactory();
    }
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40720799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档