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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JDO помогите разобраться со связями (GAE), Проблема вытащить связанный объект  
:(
    Опции темы
Maksys
Дата 5.7.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


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

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



Ребят тут джаву изучаю J2EE. И вот Google App Engine
И вот трабла с объектами в JDO хотя вроди бы раньше работало.
Ладно текущее состояние классов:
Главный класс User
Код

@PersistenceCapable
public class User {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key userId;
    @Persistent
    @Unique
    private String login;
    @Persistent
    @Unique
    private String email;
    @Persistent
    private String password;
    @Persistent(mappedBy = "user")
    private UserProperties userProperties;
    
//getsetter

}

Код

@PersistenceCapable
public class UserProperties {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String user_id;
    @Persistent
    private User user;
    @Persistent
    private String firstName;
    @Persistent
    private String lastName;
    @Persistent
    private String patronymicName;
    @Persistent
    private Boolean gender;
    @Persistent
    private Date birthDate;
    @Persistent
    private String webSite;
    @Persistent
    private String language;
    @Persistent
    private Text biography;


Вроди бы все хорошо, объекты сохраняются и все в базе есть, но когда я хаваю объект обратно:
Код

PersistenceManager pm = PMF.get().getPersistenceManager();
        Query query =pm.newQuery(User.class);
        query.setFilter("login == loginData");
        query.declareParameters("String loginData");
        query.setRange(0,1);
        User tmpUser=new User();
        try {
            List<User> tmpUsers = (List<User>) query.execute(login);
            tmpUser=tmpUsers.get(0);
        }catch (JDOObjectNotFoundException e){
            tmpUser=null;
        } finally {
            pm.close();
        }
        return tmpUser;

то tmpUser.getUserProperties() = null 
Голова уже болит, чую я JDO не до понимаю.


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
emmanuil
Дата 5.7.2011, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Убери setRange, сделай query.setUnique(true);
List<User> tmpUsers = (List<User>) query.execute(login); поменяй на User tmpUser = (User)query.execute(login);

Если все же нет, то проверь, что возвращает query.execute(login) без приведения.

Добавлено через 1 минуту и 3 секунды
Ой, ё! Не о том пишу. smile

Добавлено через 6 минут и 48 секунд
А если UserProperties отдельно запросить для того юзера, он есть?
Возможно при сохранении не было каскадного сохранения.
PM MAIL   Вверх
Stolzen
Дата 5.7.2011, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А в контексте транзакции (до вызова pm.close()) tmpUser.getUserProperties() тоже null? 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Maksys
Дата 5.7.2011, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


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

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



Ага тоже, тоесть во время записи объект есть и все записывается, а после запроса, тупо нулл.


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
emmanuil
Дата 5.7.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код сохранения какой?
PM MAIL   Вверх
Maksys
Дата 5.7.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


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

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



Цитата(emmanuil @  5.7.2011,  12:00 Найти цитируемый пост)
А если UserProperties отдельно запросить для того юзера, он есть?

Да отдельно возвращает.

Добавлено через 40 секунд
Цитата(emmanuil @  5.7.2011,  12:20 Найти цитируемый пост)
Код сохранения какой? 

Код

PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.currentTransaction().begin();
            user.setUserId(key);
            user=pm.makePersistent(user);
            user.setUserProperties(userProperties);
            pm.makePersistent(user);
            pm.currentTransaction().commit();
        }catch (Exception e){
            pm.currentTransaction().rollback();
            throw new RuntimeException(e);
        }finally{
            pm.close();
        }



--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
emmanuil
Дата 5.7.2011, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сложно сказать...
С гае не работал, но когда работал с датануклеусом, была проблема при аттаче и детаче.
Может попробовать так:
Код

user.setUserId(key);
user.setUserProperties(userProperties);
pm.makePersistent(user);


Потом
Код

user.setUserId(key);
pm.makePersistent(user);
user.setUserProperties(userProperties);
pm.makePersistent(user);


а user и userProperties откуда берутся? Это новые объекты?

Добавлено через 1 минуту и 38 секунд
Хитрая связь какая-то:
Код

@PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String user_id;
    @Persistent
    private User user;


почему тут примари кей не user?
PM MAIL   Вверх
Maksys
Дата 5.7.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


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

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



Руководитель пришел и сказал: "в ЖОПУ GAE делаем на cloud Foundry!"
Проблемма не решена, но пока что отпала, будет принцип добью вопрос.


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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