Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA createNativequery / 7 сообщений из 7, страница 1 из 1
31.10.2013, 15:57:46
    #38448573
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
Есть запрос к БД

Код: java
1.
2.
3.
4.
5.
6.
7.
                Query query = em.createNativeQuery("select a, b from table where index= ?");
                String a= "";
                String b= "";

                query.setParameter(1, ""test);
                List<BeanAB> beanABList= (List<BeanAB>) query.getResultList();
        }




Почему beanABList на выходе содержит массив object а не BeanAB
...
Рейтинг: 0 / 0
31.10.2013, 16:05:32
    #38448600
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
public class BeanAB implements Serializable {

    @Column(name = "a")
    private String a;

    @Column(name = "b")
    private String b;

    public BeanAB () {
    }

    public String getA() {
        return a;
    }

    public void setB(String b) {
        this.b= b;
    }

    public String getB() {
        return b;
    }

    public void setA(String a) {
        this.a= a;
    }

    @Override
    public boolean equals(Object o) {
        if(!( o instanceof BeanAB )) {
            return false;
        }
        BeanAB sd = (BeanAB )o;
        return sd.getA().equals(getA()) && sd.getB().equals(getB());
    }

    @Override
    public int hashCode() {
        return a.hashCode();
    }
}
...
Рейтинг: 0 / 0
31.10.2013, 16:06:56
    #38448601
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
Потому что JPA провайдер понятия не имеет о том на какой класс вы хотите замапить результаты вашего SQL запроса.
Как он должен угадать что это запрос для BeanAB, а не для BeanTT, например?
...
Рейтинг: 0 / 0
31.10.2013, 16:11:10
    #38448614
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
BlazkowiczПотому что JPA провайдер понятия не имеет о том на какой класс вы хотите замапить результаты вашего SQL запроса.
Как он должен угадать что это запрос для BeanAB, а не для BeanTT, например?

Ну с другой стороны кастование проходит без ошибок


Те явно с бином не смогу работать?
...
Рейтинг: 0 / 0
31.10.2013, 16:22:06
    #38448638
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
-=Koba=-Ну с другой стороны кастование проходит без ошибок

Кастование к List происходии без ошибок, потому что метод действительно возвращает List.
Кастования к <BeanAB> не происходит потому что erasure. И компилятор там явно warning пишет, сообщая что там может оказаться совсем не BeanAB.

-=Koba=-Те явно с бином не смогу работать?
Ну, давайте я за вас пойду и почитаю документацию
http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#createNativeQuery(java.lang.String, java.lang.Class) createNativeQuery

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

Create an instance of Query for executing a native SQL query.

Parameters :
sqlString - a native SQL query string
resultClass - the class of the resulting instance(s)
Returns :
the new query instance
...
Рейтинг: 0 / 0
01.11.2013, 16:08:03
    #38450181
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
Переделал

Вызов
Код: java
1.
2.
3.
                Query query = em.createNativeQuery("select A, B from tableAB where AB = ?", beanAB.class);
                query.setParameter(1, "test");
                List<BeanAB> beanABlist= query.getResultList();



BeanAB
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
@Entity
@Table(name = "tableAB")
public class BeanAB implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "A")
    private String a;

    @Column(name = "B")
    private String sSHIFT;

    beanAB() {
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a= a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b= b;
    }

    @Override
    public boolean equals(final Object obj) {
...
    }

    @Override
    public int hashCode() {
...
    }




Ловлю ошибку
javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: ru...BeanAB


Что тут не так?
...
Рейтинг: 0 / 0
01.11.2013, 16:15:05
    #38450199
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA createNativequery
-=Koba=-,
проверьте, есть ли маппинг для этой сущности
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA createNativequery / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]