gpt4 book ai didi

java - Hibernate - 如何在不映射到特定类的情况下执行命名 native 查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:51 28 4
gpt4 key购买 nike

我有一个非常复杂的查询,无法转换为 HQL,所以我必须使用 SQL。我将查询放入 NamedNativeQuery 注释中。它“应该”返回一个包含两个值的列表 ( List<Object[2]> )。当我尝试运行时, session 无法加载查询,因为我没有定义映射或结果类。我无法创建一个简单的类来将这些值映射到,因为注释必须进入特定的 DAO 项目,并且使用查询的代码存在于它自己的项目中。 (DAO 项目更通用,该项目中的实体直接映射到我们数据库中的表。我不能只在该项目中创建一个小类来映射到我的查询结果,因为它不适合该项目的架构)

有没有办法让我将查询结果映射到一个更通用的类,或者更好的是有什么办法让我得到一个 List<Object[]>返回而无需映射到任何特定的东西?当我只想执行查询并将结果作为数组返回时,Hibernate 必须以这种特定方式工作,这非常令人沮丧。

最佳答案

这是我用来在 List<Object[]> 中存储 SQL 查询结果的代码.也许您可以根据需要调整它:

    public List<Object[]> executeSelectQuery(String sqlQuery) {

List<Object[]> cleanedResults = new ArrayList<Object[]>();

SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(sqlQuery);
List<Object[]> hibernateResults = query.list();

// Hibernate does not return always a List<Object[]>, but a list of strings or integers, so it is necessary to check the returned values

if (!hibernateResults.isEmpty()) {
if (hibernateResults.get(0) instanceof Object[]) {
cleanedResults = hibernateResults;
} else {
Object[] row;
// Use a 'for' because 'foreach' sometimes has casting exceptions converting to object
for (int i = 0; i < hibernateResults.size(); i++) {
row = new Object[1];
row[0] = hibernateResults.get(i);
cleanedResults.add(row);
}
}
}

return cleanedResults;
}

关于java - Hibernate - 如何在不映射到特定类的情况下执行命名 native 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25048744/

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