Excluding a bean's field in Hibernate criteria

2019-02-03 19:44发布

问题:

Here is how I'm getting my User beans from Database.

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

That returns all of User records from database. Interesting part is that, I don't want to get the password field from DB. Just want to exclude that field while retrieving.

Options I have

1) using projections on other fields. That needs to be more code to add in to projections list. So dropped from that idea.

2) With Sql I need to write a manually query, which kills the theme of Hibernate.

Any possibility to exclude a column value of Bean ?

回答1:

Let's assume that following is your POJO:

User.java

private long id;
private String fName;
private String lName;

// getter - setter of all fields

Now suppose you want to get only id & fName fields and not lName.

Apart from the two approaches you've described, there's also a third way to achieve this, which uses HQL.

Query q1 = session.createQuery("Select new User(id, fName) from User");
List<User> users = q1.list();

Modify User.java to have another constructor as follows:

public User(long id, String fName)
    {
        this.id = id;
        this.fName = fName;
    }

In short, whatever fields you want to retrieve, you can list them in the constructor as well as in the query.

Hope this helps.



回答2:

you can try:

Example example = Example.create(cat)
    .excludeZeroes()           //exclude zero valued properties
    .excludeProperty("color")  //exclude the property named "color"
    .ignoreCase()              //perform case insensitive string comparisons
    .enableLike();             //use like for string comparisons
List results = session.createCriteria(Cat.class)
    .add(example)
    .list();

Reference :-

  • http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/querycriteria.html#querycriteria-examples
  • http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/criterion/Example.html