過去 4 時間、名前付きクエリの結果をキャストするためにグーグルで検索したチュートリアルを探して試してみましたが、実行可能な解決策が見つかりませんでした。以下のコードのスニピットを実行すると、java.lang.ClassCastException
エラーが発生します (以下を参照)。
sessionCriteria
(うまくいった)を使用してレコード全体の結果を取得することから、を使用して3つのテーブル列のみを返すことに切り替えましたgetNamedQuery
。
元のコード ブロック
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);
}