2011-11-07 147 views
0

我正试图保存一个UserOnline对象,它与数据库中的用户有OneToOne关系。如果它不存在,我想创建一个新的,如果它存在,只需更换房间。将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实际上是空,该对象不实际保存。任何想法,为什么这是?这不是给我一个错误,它只是不创造记录。我也想知道如何从User对象开始创建一个UserOnline对象。

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

灿相关对象进行的东西(创建如果不存在,否则编辑)保存这种方式?

User.java

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

的save()方法是from the play framework.

+0

你能提供更多的代码吗?例如。 save()函数以及对象之间的关系是如何建模的... – bert

+0

save()方法来自播放框架,我应该提到这一点。发布更新! – networkprofile

回答

1

我想这个问题是发挥框架有关。如果是这样,最好将它标记为这样,因为在Play Framework中使用Hibernate具有一些特性,请参阅Explicit save

关于这个问题,Play Framework的save()级联在其上的关系有cascade=CascadeType.ALL。如果你的关系是这样配置的,它应该可以正常工作。

+0

我目前的代码似乎与Cascade选项一起工作。我也可以这样从用户对象创建我的useronline对象吗? – networkprofile