Deprecated createCriteria method in Hibernate 5

后端 未结 4 925
陌清茗
陌清茗 2020-11-29 02:11

This calling is deprecated:

session.createCriteria(Bus.class).list();

In source files I can see this:

/** @deprecated */
@D         


        
相关标签:
4条回答
  • 2020-11-29 02:43

    You can use the following interfaces instead in Hibernate 5.2 +:

    javax.persistence.criteria.CriteriaBuilder
    javax.persistence.criteria.CriteriaQuery
    
    // Create CriteriaBuilder
    CriteriaBuilder builder = session.getCriteriaBuilder();
    
    // Create CriteriaQuery
    CriteriaQuery<YourClass> criteria = builder.createQuery(YourClass.class);
    
    0 讨论(0)
  • 2020-11-29 02:48

    Adding Answer as of March 2018.

    Dependencies:

    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;
        }
    

    while the sessionFactory is:

    public static SessionFactory buildSessionFactory() {
            final ServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
            return new MetadataSources(registry).buildMetadata().buildSessionFactory();
        }
    
    0 讨论(0)
  • 2020-11-29 02:50

    I had the following method, changed the object names for security reasons:

    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();
    }
    

    Changing that to use:

    javax.persistence.criteria.CriteriaBuilder
    javax.persistence.criteria.CriteriaQuery
    

    The query look like the following:

    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();
    }
    

    Hope it helps someone else, please feel free to suggest any chanages to improve the code.

    0 讨论(0)
  • 2020-11-29 03:03

    from the API documentation:

    @Deprecated Criteria createCriteria(Class persistentClass) Deprecated. (since 5.2) for Session, use the JPA Criteria Create Criteria instance for the given class (entity or subclasses/implementors). Parameters: persistentClass - The class, which is an entity, or has entity subclasses/implementors Returns: The criteria instance for manipulation and execution

    So it briefly says to...

    use the JPA Criteria Create Criteria

    0 讨论(0)
提交回复
热议问题