Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPA, eclipselink 
:(
    Опции темы
sergioK
Дата 6.9.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Делаю простой выбор данных 
Код


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //PersistenceUtil p= Persistence.getPersistenceUtil();
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA1");
         EntityManager em = emf.createEntityManager();
      
        Query q=  em.createNativeQuery("select * from students");
        System.out.println("**********"+q.getResultList().getClass().getName());
        Vector<com.Student> l=(Vector<Student>) q.getResultList();
    /* line 32 */      System.out.println("**********"+  l.elementAt(0).getEducationYear() );
     
            em.close();
            emf.close();
        }


получаю runtime, ошибку Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.Student
    at com.Main.main(Main.java:32)
пробовал и  ( Student) l.elementAt(0)) .getEducationYear() - таже проблема кастинга 
пробовал вместо Vector'a List и ArrayList - ничего не дало ,  

kласс прописан вот так 
Код

  package com;

import java.io.Serializable;
import javax.persistence.*;
import java.util.Date;


/**
 * The persistent class for the students database table.
 * 
 */
@Entity
@NamedQueries({
    @NamedQuery(
        name="selectAll",
        query="SELECT x FROM Student x"
    )
})
@Table(name="students")
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="student_id", unique=true, nullable=false)
    private int studentId;

    @Temporal( TemporalType.DATE)
    @Column(name="dateOfBirth",nullable=false)
    private Date dateOfBirth;

    @Column(name="educationYear",nullable=false)
    private int educationYear;

    @Column(name="firstName", nullable=false, length=255)
    private String firstName;

    @Column(name="group_id", nullable=false)
    private int groupId;

    @Column(name="patronymic",nullable=false, length=255)
    private String patronymic;

    @Column(name="sex",length=1)
    private String sex;

    @Column(name="surName",nullable=false, length=255)
    private String surName;

    public Student() {
    }

    public int getStudentId() {
        return this.studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public Date getDateOfBirth() {
        return this.dateOfBirth;
    }

    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    public int getEducationYear() {
        return this.educationYear;
    }

    public void setEducationYear(int educationYear) {
        this.educationYear = educationYear;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public int getGroupId() {
        return this.groupId;
    }

    public void setGroupId(int groupId) {
        this.groupId = groupId;
    }

    public String getPatronymic() {
        return this.patronymic;
    }

    public void setPatronymic(String patronymic) {
        this.patronymic = patronymic;
    }

    public String getSex() {
        return this.sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getSurName() {
        return this.surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

}


 работаю через Eclipse . решил попробовать JPA.В чем ошибка ? В дебагере я вижу все нужные результаты ,но при попытке их вывода на экран 
 получаю ошибку кастинга 

PM MAIL   Вверх
Vasay
Дата 6.9.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 11
Всего: 73



sergioK, 



попробуй:
Код

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //PersistenceUtil p= Persistence.getPersistenceUtil();
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA1");
         EntityManager em = emf.createEntityManager();
      
        Query q=  em.createNativeQuery("select * from students");

        List<com.Student> StudentList = q.getResultList();
        
        for(com.Student st : StudentList) {
             System.out.println(st.getFirstName());
        }
            em.close();
            emf.close();
        }


Добавлено @ 22:19
sergioK, 

Использовать NativeQuery в JPA не есть гуд. 

Используй JPQL
Или Criteria

Это сообщение отредактировал(а) Vasay - 6.9.2010, 22:28


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
sergioK
Дата 7.9.2010, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Vasay @ 6.9.2010,  22:10)
sergioK, 



попробуй:
Код

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //PersistenceUtil p= Persistence.getPersistenceUtil();
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA1");
         EntityManager em = emf.createEntityManager();
      
        Query q=  em.createNativeQuery("select * from students");

        List<com.Student> StudentList = q.getResultList();
        
        for(com.Student st : StudentList) {
             System.out.println(st.getFirstName());
        }
            em.close();
            emf.close();
        }


Добавлено @ 22:19
sergioK, 

Использовать NativeQuery в JPA не есть гуд. 

Используй JPQL
Или Criteria

Vasay ,
Таже ошибка на строке  for(com.Student st : StudentList) 
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.Student
    at com.Main.main(Main.java:32)


Использовать NativeQuery в JPA не есть гуд это Я понимаю , 

как проблему еастинга решить , ?

PM MAIL   Вверх
Skipy
Дата 7.9.2010, 09:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



А не проще под дебаггером посмотреть, что у Вас возвращается? Судя по всему, в возвращаемом List содержатся массивы объектов, во всяком случае, ошибка про это.

BTW, а у гугла спрашивать не пробовали? У меня поиск занял 5 минут:

http://stackoverflow.com/questions/1558297...tlist-behaviour
http://forums.java.net/jive/thread.jspa?threadID=26593
https://forum.hibernate.org/viewtopic.php?f...868&start=0


Это сообщение отредактировал(а) Skipy - 7.9.2010, 09:17


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Vasay
Дата 7.9.2010, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 11
Всего: 73



Цитата(sergioK @  7.9.2010,  07:26 Найти цитируемый пост)
cannot be cast to com.Student    at com.Main.main


Код

List<com.Student> StudentList = (List<com.Student>)q.getResultList()


Добавлено через 2 минуты и 39 секунд
Цитата(Skipy @  7.9.2010,  09:10 Найти цитируемый пост)
Судя по всему, в возвращаемом List содержатся массивы объектов


отличных от com.Student


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Skipy
Дата 7.9.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



Цитата(Vasay @ 7.9.2010,  09:11)
Цитата(Skipy @  7.9.2010,  09:10 Найти цитируемый пост)
Судя по всему, в возвращаемом List содержатся массивы объектов


отличных от com.Student

Разумеется отличных - com.Student не является массивом объектов. Если я правильно понимаю то, что нашел в гугле, надо бы указать, на какой класс мепить результаты, т.е. использовать

Query createNativeQuery(java.lang.String sqlString, java.lang.Class resultClass)


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
sergioK
Дата 8.9.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Skipy @ 7.9.2010,  09:19)
Цитата(Vasay @ 7.9.2010,  09:11)
Цитата(Skipy @  7.9.2010,  09:10 Найти цитируемый пост)
Судя по всему, в возвращаемом List содержатся массивы объектов


отличных от com.Student

Разумеется отличных - com.Student не является массивом объектов. Если я правильно понимаю то, что нашел в гугле, надо бы указать, на какой класс мепить результаты, т.е. использовать

Query createNativeQuery(java.lang.String sqlString, java.lang.Class resultClass)

правильно
Код

  Query q=  em.createNativeQuery("select * from students ",Student.class); 


работает на ура 


или же нужно изголяться 
Код

   Query q=  em.createNativeQuery("select * from students ");
   List<Object> results = q.getResultList();
            
        for (Object oRow : results) {
            Object[] r = (Object[]) oRow;
           
             System.out.println(r[0]);
             System.out.println(r[1]);
        }
    



    именно так показывет дебагер , получаеться как-бы  не доделаный smile  resultSet 

    всем спасибо ,


 P.S .


 может кому пригодиться работа с em.createNamedQuery
 
 Query q = em.createNamedQuery("selectAll");

 предварительно в самом классе нужно прописать 
@NamedQueries({
    @NamedQuery(
        name="selectAll",
        query="SELECT x FROM Student x"
    )
})

 напрямую (em.createNamedQuery("SELECT x FROM Student x");) не работает 

https://bugs.eclipse.org/bugs/show_bug.cgi?...e&id=322579



   

   




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.