簡體   English   中英

在JPA中使用列表時發生ClassCastException

[英]ClassCastException while using list in JPA

我正在嘗試在Eclipse中執行JPA程序。 我已經導入了所有必要的程序包。

這是我的POJO(@entity)課

@Entity
public class Student
{
    int id,marks;
    String name;
    Student(int i, int j, String k)
    {
        id=i;marks=j;name=k;
    }
    public int getMarks()
    {
        return marks;
    }
    public void setMarks(int i)
    {
        marks = i;
    }
}

這是我的“主要”課程的一部分

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("database/database.odb");
        EntityManager em = emf.createEntityManager();
        Student s1;
        em.getTransaction().begin();
        s1 = new Student(1,100,"abcd");
        em.persist(s1);
        s1 = new Student(2,200,"efgh");
        em.persist(s1);
        s1 = new Student(3,300,"ijkl");
        em.persist(s1);
        em.getTransaction().commit();
        Query q1 = em.createQuery("select marks from Student");
        List<Student> result =  q1.getResultList();
        em.getTransaction().begin();
        for(Student s : result)
        {
            if(s.getMarks()%200==0)
                em.remove(s);
            else
                s.setMarks(s.getMarks()*2);
        }
        em.getTransaction().commit();
        q1 = em.createQuery("select marks from Student");
        System.out.println("Details of students are : " + q1.getResultList());

我期望的輸出是:[200,600],因為第一條和第三條記錄中的標記應乘以2,而第二條記錄應被刪除。

但是我得到一個錯誤:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to assg6.Student at assg6.Main.main(Main.java:52)

(我的項目的軟件包名稱為assg6)

我試過了

List<Student> result =  (List<Student>)q1.getResultList();

for(Student s : (List<Student>)result)

為什么我沒有得到預期的輸出,我怎么得到?

顯然, q1.getResultList()返回一個整數列表。 不足為奇,因為您說的是Query q1 = em.createQuery("select marks from Student");

您可能想寫"select s from Student s"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM