In this example you’ll learn how to add restrictions to the Criteria
object. Using restriction we can narrow the result of our query. In the code below we add some restrictions such as Restrictions.eq()
, Restrictions.like()
and Restrictions.isNotNull()
.
In Hibernate framework you’ll find a lot of class the use a method chaining. As in the example below you can see that we actually can add an endless restrictions by calling the add()
method.
package org.kodejava.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.hibernate.cfg.Configuration;
import org.kodejava.hibernate.model.Track;
import java.util.List;
public class RestrictionsDemo {
public static Session getSession() throws HibernateException {
String cfg = "hibernate.cfg.xml";
SessionFactory sessionFactory = new Configuration().configure(cfg)
.buildSessionFactory();
return sessionFactory.openSession();
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try (Session session = getSession()) {
Criteria criteria = session.createCriteria(Track.class)
.createAlias("artist", "artist")
.createAlias("genre", "genre")
.add(Restrictions.eq("title", "Ob-La-Di, Ob-La-Da"))
.add(Restrictions.like("artist.name", "%Beatles%"))
.add(Restrictions.isNotNull("genre.name"));
List<Track> tracks = criteria.list();
for (Track track : tracks) {
System.out.println("Track = " + track.getTitle() +
"; Artist = " + track.getArtist().getName() +
"; Genre = " + track.getGenre().getName());
}
}
}
}
Here are some other restrictions that can also be used to narrow our Criteria
query result, for a complete restrictions you can see the Restrictions class documentation.
Restrictions.ne("title", "Twist and Shout")
– Apply a “not equal” constraint to the named property.Restrictions.ilike("title", "Twist%")
– A case-insensitive “like”.Restrictions.isNull("title")
– Apply an “is null” constraint to the named property.Restrictions.gt("duration", new Integer(200))
– Apply a “greater than” constraint to the named property.Restrictions.between("duration", new Integer(100), new Integer(200))
– Apply a “between” constraint to the named propertyRestrictions.or(criterionA, criterionB)
– Return the disjunction of two expressions.Restrictions.disjuction()
– Group expressions together in a single disjunction.
Maven Dependencies
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.9.Final</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024