Hibernate и как правильно увязать
От: _me_  
Дата: 27.03.09 15:07
Оценка:
есть у меня к примеру два класса Member и Order на которых сделан маппинг двух таблиц БД, так вот, а мне вот к примеру нужно вывести информацию в JSP,
т.е. список пользователей, а также сколько у кого какой баланс, т.е. получается если бы я делал запросом, то объеденял бы две таблицы и получал бы одну таблицу с данными. А как сделать для JSP, чтобы я мог как говорится из одного листа читать, т.е. мне нужно создавать еще какой то третий класс??? не хочется же перебирать всех мемберов и делать запросы по Order.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Hibernate и как правильно увязать
От: Blazkowicz Россия  
Дата: 27.03.09 15:09
Оценка: 2 (1)
Здравствуйте, _me_, Вы писали:

__>есть у меня к примеру два класса Member и Order на которых сделан маппинг двух таблиц БД, так вот, а мне вот к примеру нужно вывести информацию в JSP,

__>т.е. список пользователей, а также сколько у кого какой баланс, т.е. получается если бы я делал запросом, то объеденял бы две таблицы и получал бы одну таблицу с данными. А как сделать для JSP, чтобы я мог как говорится из одного листа читать, т.е. мне нужно создавать еще какой то третий класс??? не хочется же перебирать всех мемберов и делать запросы по Order.
Сделай вьюху, которая будет по order считать баланс и замапь её на новую сущность.
Re[2]: Hibernate и как правильно увязать
От: GarryIV  
Дата: 27.03.09 15:37
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, _me_, Вы писали:


__>>есть у меня к примеру два класса Member и Order на которых сделан маппинг двух таблиц БД, так вот, а мне вот к примеру нужно вывести информацию в JSP,

__>>т.е. список пользователей, а также сколько у кого какой баланс, т.е. получается если бы я делал запросом, то объеденял бы две таблицы и получал бы одну таблицу с данными. А как сделать для JSP, чтобы я мог как говорится из одного листа читать, т.е. мне нужно создавать еще какой то третий класс??? не хочется же перебирать всех мемберов и делать запросы по Order.
B>Сделай вьюху, которая будет по order считать баланс и замапь её на новую сущность.

Можно и без вьюхи — на запрос замапить.
WBR, Igor Evgrafov
Re[3]: Hibernate и как правильно увязать
От: Blazkowicz Россия  
Дата: 27.03.09 15:42
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Можно и без вьюхи — на запрос замапить.

Вьюха по идее даёт запас для оптимизации в будущем. Например балансы считать на каждый запрос будет накладно, тогда можно сделать в базе что вьюха будет пересчитыватся при апдейтах, а сами запросы будут работать шустро.
Если запрос оставить в Java сервере, то для такой оптимизации все равно придется ломать сам сервер.
Re[4]: Hibernate и как правильно увязать
От: GarryIV  
Дата: 27.03.09 21:15
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

GIV>>Можно и без вьюхи — на запрос замапить.

B>Вьюха по идее даёт запас для оптимизации в будущем. Например балансы считать на каждый запрос будет накладно, тогда можно сделать в базе что вьюха будет пересчитыватся при апдейтах, а сами запросы будут работать шустро.
B>Если запрос оставить в Java сервере, то для такой оптимизации все равно придется ломать сам сервер.

Баланс обычно хранится посчитанным. А так не вижу причин мешающих в дальнейшем при необходимости из запроса сделать вьюшку как впрочем и наоборот.
WBR, Igor Evgrafov
Re[5]: Hibernate и как правильно увязать
От: Blazkowicz Россия  
Дата: 28.03.09 00:15
Оценка: 1 (1)
Здравствуйте, GarryIV, Вы писали:

GIV>Баланс обычно хранится посчитанным.

Чем гарантируется целостность?
Re[2]: Hibernate и как правильно увязать
От: _me_  
Дата: 28.03.09 14:46
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

Еще один вопрос из этой же оперы. Не хочу просто создавать новую тему.

Вот есть сущности Member и Order.

Мне нужно вывести список ордеров, но, нужно напротив каждого ордера видеть имя Member'a, а в Order
от мембера есть только memberId. Не хотелось бы в таком случае ради одного поля делать вьюху, что на счет такой задачи, что скажете??
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Hibernate и как правильно увязать
От: KRA Украина  
Дата: 29.03.09 01:25
Оценка: 2 (1)
Здравствуйте, _me_, Вы писали:

__>Здравствуйте, Blazkowicz, Вы писали:


__>Еще один вопрос из этой же оперы. Не хочу просто создавать новую тему.


__>Вот есть сущности Member и Order.


__>Мне нужно вывести список ордеров, но, нужно напротив каждого ордера видеть имя Member'a, а в Order

__>от мембера есть только memberId. Не хотелось бы в таком случае ради одного поля делать вьюху, что на счет такой задачи, что скажете??

В БД в таблице order есть только memberId, но в объекте Order нужно иметь не memberId, а member типа Member (про мапинг читайте здесь). Я так понимаю, что свойство member не всегда нужно при работе с Order, тогда по умолчанию в мапинге делайте его lazy, а конкретно в этом случае в запросе его явно подтягивайте

from Order o inner join fetch o.member


Этот запрос вытащит все заказы и проинициализирует в них поля member.
Re[4]: Hibernate и как правильно увязать
От: _me_  
Дата: 29.03.09 08:35
Оценка:
Здравствуйте, KRA, Вы писали:

KRA>В БД в таблице order есть только memberId, но в объекте Order нужно иметь не memberId, а member типа Member (про мапинг читайте здесь). Я так понимаю, что свойство member не всегда нужно при работе с Order, тогда по умолчанию в мапинге делайте его lazy, а конкретно в этом случае в запросе его явно подтягивайте


KRA>
KRA>from Order o inner join fetch o.member 
KRA>


KRA>Этот запрос вытащит все заказы и проинициализирует в них поля member.


в теории все понятно, а можно пример? а то еще в хибернейта опыта нет особого, только простой маппинг делал. особенно интересно посмотреть на примере как делать lazy и куда прописывать запрос.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Hibernate и как правильно увязать
От: KRA Украина  
Дата: 29.03.09 17:08
Оценка: 3 (1)
Здравствуйте, _me_, Вы писали:

__>в теории все понятно, а можно пример? а то еще в хибернейта опыта нет особого, только простой маппинг делал. особенно интересно посмотреть на примере как делать lazy и куда прописывать запрос.


Вот пример использования Lazy
//...

@Entity
@Table(name = "USR")
@SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ", allocationSize = 1)
public class User  {

    private UserGroup group;

    //...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "GROUP_ID")
    public UserGroup getGroup() {
        return group;
    }

    public void setGroup(UserGroup group) {
        this.group = group;
    }
}


Пример выполнения запроса (тут выбирается одна запись)
        session.createQuery("from TrafficSource as ts where ts.foreignChannelId = :foreignChannelId and ts.server.id = :serverId")
                .setParameter("foreignChannelId", foreignChannelId)
                .setParameter("serverId", serverId)
                .uniqueResult();


В Вашем случае можно обойтись и critria api, как по мне это предпочтительней, т.к. присутствует контроль типов как минимум. Для Вашего случая запрос будет выглядеть так
getSession
session.createCriteria(Order.class).setFetchMode("member", FetchMode.JOIN).list();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.