从 JPA 本机查询获取列名

2022-09-03 06:50:27

我的 Web 应用程序中有一个管理控制台,它允许管理员对数据库执行自定义 SQL SELECT 查询。

在下面,应用程序正在使用Hibernate,但这些查询不是HQL,它们是纯SQL,所以我使用这样的本机查询:

protected EntityManager em;

public List<Object[]> execute(String query) {
    Query q = em.createNativeQuery(query);
    List<Object[]> result = q.getResultList();
    return result;
}

这可以正常工作,但它只返回数据行,没有额外的信息。我还想获取列名称,因此当我将结果打印回用户时,我还可以打印标题以显示各个列的内容。

有什么办法可以做到这一点吗?


答案 1

2020

使用休眠5.2.11.Final实际上很容易。在我的示例中,您可以看到我如何获取每行的列名。以及我如何通过列名获取值。

Query q = em.createNativeQuery("SELECT columnA, columnB FROM table");
List<Tuple> result = q.getResultList();

for (Tuple row: result){

    // Get Column Names
    List<TupleElement<Object>> elements = row.getElements();
    for (TupleElement<Object> element : elements ) {
        System.out.println(element.getAlias());
    }

    // Get Objects by Column Name
    Object columnA;
    Object columnB;
    try {
        columnA = row.get("columnA");
        columnB= row.get("columnB");
    } catch (IllegalArgumentException e) {
        System.out.println("A column was not found");
    }
}

答案 2
Query query = entityManager.createNamedQuery(namedQuery);
NativeQueryImpl nativeQuery = (NativeQueryImpl) query;
nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> result = nativeQuery.getResultList();

现在你有Map<String,Object>。您可以看到您的列名称


推荐