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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EJB. не подгружать элемент, если известно, что он не востребован 
:(
    Опции темы
polosatij
Дата 15.4.2007, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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




возможно ли не подгружать элемент UserInfo при загрузке User, если известно заранее => элемент UserInfo вообще не будет востребован?  smile  smile 

Код

package ejb.login;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.validator.Length;

import ejb.window.Window;



@Entity
@Table(name="User")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id;
    private String username;
    private String password;
    private RoleType role;
    private UserInfo userInfo;
    private Collection<Window> windows = new ArrayList<Window>();

    public User() {
        //
    }
    
    @Id
    @GeneratedValue
    @Column(name="ID")
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    @Length(min=1, max=32)
    @Column(name="USERNAME", nullable=false, unique=true)
    public String getUsername() {
        return this.username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    @Column(name="PASSWORD", nullable=false, length=32)
    public String getPassword() {
        return this.password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    
    // @Length(max=14)
    @Enumerated(EnumType.STRING)
    @Column(name="ROLE", nullable=false)
    public RoleType getRole() {
        return this.role;
    }
    
    public void setRole(RoleType role) {
        this.role = role;
    }
    
    @Basic(fetch=FetchType.LAZY, optional=false) // <-- попробовал так, но к сожалению не получается, см. внизу
    @OneToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="USERINFO_ID", nullable=false)
    public UserInfo getUserInfo() {
        return this.userInfo;
    }
    
    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }
    
    @OneToMany(cascade={CascadeType.ALL})
    @JoinTable(name="USER_WINDOW", joinColumns={@JoinColumn(name="USER_ID")}, inverseJoinColumns={@JoinColumn(name="WINDOW_ID")})
    public Collection<Window> getWindows() {
        return this.windows;
    }
    
    public void setWindows(Collection<Window> windows) {
        this.windows = windows;
    }
}



здесь чётко видно, что элемент UserInfo тоже был подгружен.. хм.. 

Код

01:51:03,812 INFO  [STDOUT] Hibernate: select user0_.ID as ID0_1_, user0_.USERINFO_ID as USERINFO5_0_1_, user0_.PASSWORD as PASSWORD0_1_, user0_.USERNAME as USERNAME0_1_, user0_.ROLE as ROLE0_1_, userinfo1_.ID as ID1_0_, userinfo1_.STATE as STATE1_0_, userinfo1_.MAIL as MAIL1_0_, userinfo1_.SEX as SEX1_0_, userinfo1_.BIRTHDAY as BIRTHDAY1_0_, userinfo1_.ZIP as ZIP1_0_, userinfo1_.CITY as CITY1_0_, userinfo1_.TIMECREATED as TIMECREA8_1_0_ from User user0_ inner join UserInfo userinfo1_ on user0_.USERINFO_ID=userinfo1_.ID where user0_.ID=?



--------------------
PM   Вверх
tux
Дата 15.4.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



А почему так?
Цитата

fetch=FetchType.LAZY, optional=false

Насколько я понимаю чтобы атрибут подгружался по запросу optional=true должно быть.
PM MAIL Skype GTalk Jabber YIM   Вверх
polosatij
Дата 15.4.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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






Цитата(tux @  15.4.2007,  09:58 Найти цитируемый пост)
Насколько я понимаю чтобы атрибут подгружался по запросу optional=true должно быть. 


упс.. да, ты прав.. не туда я посмотрел.. однако при замене на optional=true, ничего не изменилось

Код

12:32:36,875 INFO  [STDOUT] Hibernate: select user0_.ID as ID0_1_, user0_.USERINFO_ID as USERINFO5_0_1_, user0_.PASSWORD as PASSWORD0_1_, user0_.USERNAME as USERNAME0_1_, user0_.ROLE as ROLE0_1_, userinfo1_.ID as ID1_0_, userinfo1_.STATE as STATE1_0_, userinfo1_.MAIL as MAIL1_0_, userinfo1_.SEX as SEX1_0_, userinfo1_.BIRTHDAY as BIRTHDAY1_0_, userinfo1_.ZIP as ZIP1_0_, userinfo1_.CITY as CITY1_0_, userinfo1_.TIMECREATED as TIMECREA8_1_0_ from User user0_ inner join UserInfo userinfo1_ on user0_.USERINFO_ID=userinfo1_.ID where user0_.ID=?


элемент я нахожу и подгружаю следующим методом:

Код

        User user = this.manager.find(User.class, userId);




--------------------
PM   Вверх
diablero
Дата 27.4.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Цитата(polosatij @  15.4.2007,  13:36 Найти цитируемый пост)
упс.. да, ты прав.. не туда я посмотрел.. однако при замене на optional=true, ничего не изменилось

Ты нашел решение данной проблемы?

Товарищи, кто знает, поделитесь решением smile 

И еще такой вопрос, до кучи, возможно ли ограничить подгрузку связаннх сущностей, т.е. применить такие параметры к запросу как
setFirstResult и setMaxResults ?

Это сообщение отредактировал(а) diablero - 27.4.2008, 16:00


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

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

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


 




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


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

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