Сохранение сопоставленного объекта OneToOne в базе данных?

Я пытаюсь сохранить в базе данных объект UserOnline, который имеет отношение OneToOne с пользователем. Я хочу создать новый, если он не существует, а если он существует, просто изменить комнату.

Это код, который я использую:

    UserOnline uo = (UserOnline) UserOnline.find("byUser",
            getConnectedUser()).first();

    if (uo == null) {
        uo = new UserOnline(getConnectedUser(), room);
        room.save();
    } else {
        uo.currentRoom = room;
        uo.save();
    }

По какой-то причине, хотя uo на самом деле равно нулю, объект на самом деле не сохраняется. Есть идеи, почему это так? Это не дает мне ошибку, просто не создает запись. Мне также интересно, как я могу создать объект UserOnline, начиная с объекта User.

Что-то типа

User user = User.findById(1);
user.onlineStatus.room = room.
user.save();

Можно ли таким образом сохранить связанные объекты (создать, если они не существуют и отредактировать иным образом)?

Пользователь.java

@OneToOne(mappedBy="user")
public UserOnline onlineStatus;

Метод save() из игры каркас.


person Community    schedule 07.11.2011    source источник
comment
Можете ли вы предоставить больше кода? Например. функция save() и то, как моделируются отношения между объектами...   -  person bert    schedule 07.11.2011
comment
Метод save() взят из игровой среды, я должен был упомянуть об этом. Пост обновлен!   -  person    schedule 07.11.2011


Ответы (1)


Я предполагаю, что этот вопрос связан с Play Framework. Если да, то лучше пометить его как таковой, так как использование Hibernate в Play Framework имеет некоторые особенности, см. Явное сохранение.

Что касается вопроса, save() в Play Framework каскадируется на отношения, на которых есть cascade=CascadeType.ALL. Если ваши отношения, о которых идет речь, настроены таким образом, они должны работать нормально.

person axtavt    schedule 07.11.2011
comment
Мой текущий код, похоже, работает с опцией Cascade. Могу ли я таким же образом создать свой объект useronline из объекта пользователя? - person ; 07.11.2011