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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из двух таблиц JPA 
:(
    Опции темы
sandycat
Дата 4.6.2011, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.3.2011

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



У меня есть класс

Reservation.java
Код

package reservation.bean;

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

@javax.persistence.Entity
@Table(name = "reservation")
@SecondaryTable(name="testmachine")
@NamedQueries({
@NamedQuery(
        name = "getActiveReservationByStatus",
        query = "select reservation from Reservation reservation where reservation.status=:status"),
@NamedQuery(
        name = "getMachineNameByActiveReservation",
        query = "select reservation.userId, machine.machineName " +
                "from Reservation reservation, Machine machine " +
                "where reservation.id = machine.id and reservation.status=:status"),  

       })

public class Reservation implements Serializable {
    @javax.persistence.Id
    @Column(name = "reservation_id")
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
    private int id;
    @Column(name = "reservation_status")
    private int status = 1;
    @Column(name = "user_id")
    private int userId;
    
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="reservation")
    private List<Machine> machineResultList;   

    public Reservation() {
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public int getStatus() {
        return status;
    }

     public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getUserId() {
        return userId;
    }
}



результат запроса я записываю в ArrayList
1.
Код

public ArrayList<Reservation> getActiveReservationByStatus(int statusId) {     
        Query query = entityManager.createNamedQuery("getActiveReservationByStatus");
        query.setParameter("status", statusId);
        return (ArrayList<Reservation>) query.getResultList();
    }

или
2.
Код

public ArrayList<Reservation> getMachineNameByActiveReservation(int stateId) {     
        Query query = entityManager.createNamedQuery("getMachineNameByActiveReservation");
        query.setParameter("status", stateId);
        return (ArrayList<Reservation>) query.getResultList();
    } 


если в первом варианте (запрос работает только с одной таблицей) он выдавал следующее
Код

[reservation.bean.Reservation@7dc8f91e, 
...
 reservation.Reservation@7dc8f91e];

и я могла выбрать элементы из коллекции, например, reservation.getUserId()

то во втором (запрос идет по двум таблицам) у меня никак не получается, что-то он там да выбирает
Код

[[Ljava.lang.Object;@2eb80f1c, 
[Ljava.lang.Object;@35e80f3a, 
[Ljava.lang.Object;@163fc47c, 
... 
[Ljava.lang.Object;@5fb7565, 
[Ljava.lang.Object;@3fd83cf4]; 

только я не знаю как посмотреть что именно и правильно ли. Подскажите пожалуйста куда копать?

Это сообщение отредактировал(а) sandycat - 4.6.2011, 18:33
PM MAIL   Вверх
RageSteel
  Дата 5.6.2011, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

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



Первом случае ты вибираешь одну сущность и в результате у тебя будет соответствующий объекта класса этой сущности. Во втром случае, ты выбираешь конкретные поля и результат у тебя будет в виде массива выбираемых объектов.
PM MAIL   Вверх
sandycat
Дата 5.6.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.3.2011

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



RageSteel, каким образом я могу добраться до значений?

Думала, что настроив связи OneToMany, ManyToOne они замапятся и я их определенными гетерами заберу. Но я чет не могу этого сделать, где-то ошиблась.


PM MAIL   Вверх
RageSteel
Дата 5.6.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

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



А что ты хочешь сказать этим своим запросом?

Код

select reservation.userId, machine.machineName
from Reservation reservation, Machine machine
where reservation.id = machine.id and reservation.status=:status


Почему ты выбираешь reservation.id = machine.id ?
Может лучше тебе выбирать из machine? Как-то так:
Код

SELECT m FROM Machine m WHERE m.reservation.status = :status


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

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

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


 




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


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

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