【问题标题】:Conversion of below criteria into HQL将以下标准转换为 HQL
【发布时间】:2013-08-04 07:22:56
【问题描述】:

我有以下条件,请告知如何将以下条件转换为 HQL ,因为我想使用 HQL

public List<tttBook> findtooks() {

            List<tttBook> tooks =null;
            Criteria criteria = session.createCriteria(tttBook.class);
            ProjectionList proList = Projections.projectionList();
            proList.add(Projections.property("Id"));
            proList.add(Projections.property("longName"));
            tooks = criteria.list();
            return tooks;

        }

还请让我知道在上述标准中出了什么问题,因为现在它正在获取对象的所有属性并且需要很多时间,我认为我的预测实现有问题。

【问题讨论】:

  • 你的 hql 是“来自 tttBook”
  • @Angga 但我想获取某些选定的列,因为表包含许多我不想要的列,请告知
  • 所以你想把它作为不完整的 List 返回,只有 id 和 longName 吗?您可能会考虑改用 List 。如果是,我会给你例子(tttBook/map)。
  • @是的,谢谢,请告知该示例或更新帖子,提前感谢只有 id 和 longname
  • @Angga 请发布如何从 hql 仅返回 id 和 long name 的代码,这也是 list 类型,提前致谢

标签: hibernate hql criteria


【解决方案1】:

您可以在对象tttBook 中创建另一个构造函数。此外,您应该遵循命名约定并调用以大写字母开头的类和以小写字母开头的属性。

package yourpath;

public class TttBook {
   private Long id;
   private String longName;

   public TttBook(Long id, String longName) {
      this.id = id;
      this.longName = longName;
   }

   // getters, setters
}

查询

List<TttBook > list = (List<TttBook >) session.createQuery("select 
   new yourpath.TttBook(id, longName) from TttBook").list();

【讨论】:

    【解决方案2】:

    可能是这样的

    public List<tttBook> findtooks() {
        Session s = HiberUtil.getSessionFactory().openSession();
        List<tttBook> tooks =new ArrayList<tttBook>;
        List result = session.createQuery("select a.Id, a.longName from tttBook t").List();
        for(int i =0; i< result.size();i++){
            Object[] objects = result.get(i);
            tttBook t = new tttBook();
            t.setId(objects[0]);
            t.setLongName(objects[1]);
        tooks.add(t);
        }
    
        return tooks;
    
    }
    

    【讨论】:

    • 所以通过这种方式,您可以从休眠中以对象 [] 的形式获取记录,然后将它们转换并设置到 pojo 中。
    • 所以要自动投射?我不知道你到底想要什么,这就是我问的原因。如果您希望返回已解析的对象的 HQL,您将需要 @SqlResultSetMapping。
    • 是的,现在你明白了,现在仪式需要 = criteria.list();正在返回对象数组(对象 []),我希望将其自动转换为类 tttBook 类型和 nt 对象 [],您能否为此提供更多有关 @sqlResultSetMapping 的信息。
    • 请使用有助于掌握的注释更新您的示例
    • 如果您使用 HQL,则返回将始终是对象 [](如果使用选择某些字段)或实体,如果您使用 @sqlResultSetMapping 注释,您将不会使用 HQL,但本机查询(SQL)是你可以吗?
    猜你喜欢
    • 2011-07-30
    • 2014-09-14
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2014-01-20
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多