gpt4 book ai didi

hibernate - hibernate 投影列表

转载 作者:行者123 更新时间:2023-12-04 16:40:29 31 4
gpt4 key购买 nike

我只想从表中获取一些列值。因此,我已经使用投影来实现这一目标。该代码有效,但我认为它无效。

我的问题是当我使用ProjectionsList并将标准条件列表设置为ArrayList时-Bulletin对象为null。我不确定如何更好地解释这一点。因此,我将放置代码,然后请阅读以下内容:

 List<Bulletin> list = new ArrayList<Bulletin>();
BulletinList bulletinList = null;

Criteria criteria = null;

criteria = this.getSession().createCriteria(Bulletin.class)
.setProjection(Projections.projectionList()
.add(Projections.property(bulletinIdAttr))
.add(Projections.property(docNameAttr))
.add(Projections.property(docTypeCodeAttr))
);
criteria.addOrder(Order.desc(createdTimeAttr));

List<Object> rows = criteria.list();
for (Object r : rows) {
Object[] row = (Object[]) r;
Bulletin bull = new Bulletin();
bull.setBulletinId((Long) row[0]);
bull.setDocumentName((String) row[1]);
bull.setDocumentTypeCode((String) row[2]);
list.add(bull);
}

bulletinList = new BulletinList();
bulletinList.setBulletins(list);

return bulletinList;

我只需要将criteria.list设置为BulletinList(持有Bulletin对象列表的类)。但是,当我使用投影时,公告对象为null。

我也在阅读另一个要使用的线程
setResultTransformer(Transformers.aliasToBean

但这也不起作用。因此,有人可以在此方面提供帮助,以使代码变得更好。

谢谢

ish

最佳答案

  • Projections.property()以字符串作为参数。在您提供的代码中,该String的值应为Bulletin类的成员的名称。例如,大概bulletinIdAttr是具有这样一个值的String,否则您将遇到运行时错误。
  • 在Criteria实例上调用setProjection时,您隐式将ResultTransformer设置为PROJECTIONS,这就是您想要的。无需自己调用setResultTransformer。我会像这样简化程序
    List<Object[]> rows = criteria.list();
    for (Object[] row : rows) {
    Bulletin bull = new Bulletin();
    bull.setBulletinId((Long) row[0]);
    bull.setDocumentName((String) row[1]);
    bull.setDocumentTypeCode((String) row[2]);
    list.add(bull);
    }

  • 但这不应该对您的结果产生任何影响。您是否已检查 rows为空?

    关于hibernate - hibernate 投影列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057189/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com