gpt4 book ai didi

java - 无法将 getNamedQuery 结果转换为表类

转载 作者:行者123 更新时间:2023-11-30 04:28:46 25 4
gpt4 key购买 nike

过去 4 小时我一直在寻找并尝试在 google 上搜索的用于转换命名查询结果的教程,但尚未找到可行的解决方案。当我运行下面的代码片段时,我收到一个 java.lang.ClassCastException 错误(见下文)。

我从使用 sessionCriteria 获取整个记录结果(有效)改为使用 getNamedQuery 仅返回 3 个表列。

<小时/>

原始代码块

Criteria sessionCriteria = session.createCriteria(RunContainer.class);

@SuppressWarnings ("unchecked")
List<RunContainer> runContainer = sessionCriteria.list();

命名查询代码块

Query query = session.getNamedQuery("RunContainer.GetRunsForCalendar");

List results = query.list();

for(int i = 0; i < results.size(); i++){
RunContainer result = (RunContainer)results.get(i);
System.out.println(result.getNotes());
}

RunContainer表类

@Entity
@Table (name = "container")
@NamedQueries ( {
@NamedQuery (name = "RunContainer.GetRunsForCalendar",
query = "SELECT id, date, notes FROM RunContainer")
})
public class RunContainer {

@Id
@GeneratedValue
@Column (columnDefinition = "INT UNSIGNED")
private Integer id;

private Date date;

@Column(columnDefinition = "TEXT")
private String notes;

...

错误

java.lang.ClassCastException:
[Ljava.lang.Object; cannot be cast to com.scene7.is.qa.jorogumo.tables.RunContainer
<小时/>

谁能帮我调试这个吗?我对 Java 还很陌生,这是我的第一个与工作相关的项目。

<小时/>

来自已接受答案的工作代码

如果有人遇到这篇文章,以下代码是我从接受的答案中得到的结果。

Query query = session.getNamedQuery("RunContainer.GetRunsForCalendar");
List<Object> containerResults = query.list();
List<RunContainer> runContainers = new ArrayList<RunContainer>();

for (Object result : containerResults) {

Object[] temp = (Object[]) result;
RunContainer runContainer = new RunContainer();

runContainer.setId((Integer) temp[0]);
runContainer.setDate((Date) temp[1]);
runContainer.setNotes((String) temp[2]);

runContainers.add(runContainer);
}

最佳答案

The SELECT clause queries more than one column or entity, the results are aggregated in an object array (Object[]) in the java.util.List returned by getResultList( ).

在这里,您将其转换为RunContainer,这会导致问题。遍历列表并从数组中获取各个字段。

List containerResults = query.List(); 

for(Object[] result : containerResults)
{
Integer id = (Integer) result[0];
Date date = (Date) result[1];
String notes = (String) result[2];
}

[注:提供了未编译的示例代码,请进行相应更改]

<小时/>

编辑:或者,如果所选字段与实体中的字段名称相同,您可以尝试

session.createSQLQuery("从 RunContainer 中选择 id、日期、注释").addEntity(RunContainer.class);

您可以引用here更多细节。

关于java - 无法将 getNamedQuery 结果转换为表类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150776/

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