当前位置: 首页 > 知识库问答 >
问题:

如何在数据库表中查询只有两个数据对象的记录列表

景恩
2023-03-14

我的数据库表如下所示:

ID      ACCESSID    ENTITYGUID      NAME    NAMEID      OWNERGUID   TIMECREATED     VALUEID     VALUETYPE  
public void getAllEntityMetadata(int GUID) {
        Criteria c = session.createCriteria(RevMetadata.class)
                .add(Restrictions.eq("entityGUID", GUID))
                .setProjection(Projections.property("name"))
                .setProjection(Projections.property("nameId"));

        List<RevMetadata> m = (List<RevMetadata>) (RevMetadata) c.list();
        for (RevMetadata item : m) {
            System.out.println("-> All entity metadata for GUID: " + item.getName() + " : " + item.getValueId());
        }
}
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to wakiliproject.Persistence.RevMetadata
    at wakiliproject.Persistence.PersistRevMetadata.getAllEntityMetadata(PersistRevMetadata.java:112)
    at wakiliproject.HomeController.showMetastring(HomeController.java:492)
    ... 40 more

通过示例查询,我只得到下面的输出,但没有数据。不会调用错误:

public void getAllEntityMetadataEg(int GUID) {
        RevMetadata m = new RevMetadata();
        m.setEntityGUID(GUID);
        Example e = Example.create(m);

        Criteria c = session.createCriteria(RevMetadata.class).add(e);
        for (Iterator it = c.list().iterator(); it.hasNext();) {
            RevMetadata item = (RevMetadata) it.next();
            System.out.println("-> All entity metadata for GUID: " + item.getName() + " : " + item.getValueId());
        }
}

输出:

Hibernate: select this_.id as id1_4_0_, this_.accessId as accessId2_4_0_, this_.entityGUID as entityGU3_4_0_, this_.name as name4_4_0_, this_.nameId as nameId5_4_0_, this_.ownerGUID as ownerGUI6_4_0_, this_.timeCreated as timeCrea7_4_0_, this_.valueId as valueId8_4_0_, this_.valueType as valueTyp9_4_0_ from METADATA this_ where (this_.accessId=? and this_.entityGUID=? and this_.nameId=? and this_.ownerGUID=? and this_.timeCreated=? and this_.valueId=?)

这些方法都不起作用。请帮助我使它工作,以便我可以获得一个包含namenameid两个数据对象的列表

public class RevMetadata implements Serializable {
    private String name;
    private int valueId;

}

共有1个答案

左丘凡
2023-03-14

如果只检索某些指定的列,结果将是list

在您的示例中,Object[]将使用namevalue=>index0和nameid=>index1填充。需要将其强制转换为目标值的类型。

Criteria criteria = session.createCriteria(RevMetadata.class);
criteria.add(Restrictions.eq("entityGUID", GUID));

criteria.setProjection(Projections.projectionList()
                        .add(Projections.property("name"))
                        .add(Projections.property("nameId")));

List<Object[]> criteriaResult = criteria.list();

List<RevMetadata> results = new ArrayList<RevMetadata>();
//then get result into the class properties
for (Object[] object : criteriaResult) {
    //cast to target value type
    String name = (String)object[0];
    int nameId = ((Integer)object[1]).intValue();

    RevMetadata result = new RevMetadata();
    result.setName(name);
    result.setValueId(nameId);

    results.add(result);
}

//now results of List<RevMetadata> is ready
 类似资料:
  • 问题内容: 假设我有一个包含3列的表格:Id,类别,名称。 我想以这种方式查询表:为我获取OR或OR的行 如何?不必求助于 我想使用的庞大列表…但是可以将其与2列一起使用吗? 谢谢! 问题答案: 您可以创建一个临时表 然后加入你的主表 如果要从代码中使用该方法,则可以使用表参数进行操作。 定义表类型: 和一个存储的proc将读取数据: 然后,您可以使用C#代码中的代码,例如:

  • 我已经建立了一个Access数据库,现在我正试图从SQL数据库将数据导入Access数据库表。Access数据库表现在是空的,我正试图从SQL数据库导入数据,只有一个键值。例如,我只想导入符合以下条件的数据。 我已经设置了到表的ODBC链接。我一直在寻找这样做的方法,但没有找到任何好的方法。 使现代化 找到了答案,对于任何需要知道如何做到这一点的人,以下是步骤。

  • 本文向大家介绍关于关系数据库如何快速查询表的记录数详解,包括了关于关系数据库如何快速查询表的记录数详解的使用技巧和注意事项,需要的朋友参考一下 前言 在数据库中,很多人员习惯使用SELECT COUNT(*) 、SELECT COUNT(1) 、SELECT COUNT(COL)来查询一个表有多少记录,对于小表,这种SQL的开销倒不是很大,但是对于大表,这种查询表记录数的做法就是一个非常消耗资源了

  • 问题内容: 我已经开始在一个拥有数以百计的表和视图的数据库的地方工作,所有这些表和视图都具有隐秘的名称,只有很少的元音,并且没有文档。它们也不允许对数据库架构进行无谓的更改,我也不能触摸任何数据库,除非要在我自己的计算机上进行测试(该数据库会被删除并定期重新创建),因此我无法添加对任何人都有用的注释。 我尝试使用“ Toad”创建一个ER图,但是连续运行48小时后,它仍然看不到任何可见的东西,我需

  • 本文向大家介绍SQL Server数据库按百分比查询出表中的记录数,包括了SQL Server数据库按百分比查询出表中的记录数的使用技巧和注意事项,需要的朋友参考一下 SQL Server数据库查询时,能否按百分比查询出记录的条数呢?答案是肯定的。本文我们就介绍这一实现方法。 实现该功能的代码如下: 或 创建存储过程的语法类似带指针的C#,创建时参数表用小括号括起,输出参数带传递方向的参数标识 O

  • 问题内容: 我想将一些SQL查询轨道执行的操作保存到日志文件中(即CREATE,UPDATE和DELETE),因此我需要拦截所有查询,然后使用一些正则表达式过滤它们并根据需要记录它们。 我会在Rails代码中的哪儿放这样的东西? 问题答案: 这里是c0r0ner链接的简化版本,以更好地显示它: