【问题标题】:Excluding a bean's field in Hibernate criteria result在 Hibernate 标准结果中排除 bean 的字段
【发布时间】:2014-09-22 09:03:03
【问题描述】:

这是我从数据库中获取用户 bean 的方式。

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

返回数据库中的所有用户记录。有趣的是,我不想从数据库中获取密码字段。只是想在检索时排除该字段。

我的选择

1) 在其他领域使用投影。这需要更多代码才能添加到投影列表中。所以放弃了这个想法。

2) 使用 Sql 需要手动编写查询,杀死了 Hibernate 的主题。

是否有可能排除 Bean 的列值?

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    你可以试试:

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

    参考:-

    【讨论】:

      【解决方案2】:

      假设以下是您的 POJO:

      User.java

      private long id;
      private String fName;
      private String lName;
      
      // getter - setter of all fields
      

      现在假设您只想获取 id 和 fName 字段,而不是 lName。

      除了您描述的两种方法之外,还有第三种方法可以实现这一点,它使用 HQL。

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

      修改 User.java 使其具有另一个构造函数,如下所示:

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

      简而言之,无论你想检索什么字段,你都可以在构造函数和查询中列出它们。

      希望这会有所帮助。

      【讨论】:

      • HQL 构造函数在我试图忽略具有 OneToOne 映射的属性的情况下工作。
      猜你喜欢
      • 2011-07-20
      • 2014-10-16
      • 2020-09-25
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多