Excluding a bean's field in Hibernate criteria

2019-02-03 20:16发布

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 ?

2条回答
你好瞎i
2楼-- · 2019-02-03 20:25

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 :-

查看更多
别忘想泡老子
3楼-- · 2019-02-03 20:30

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.

查看更多
登录 后发表回答