java - 在数据库中保存 OneToOne 映射对象?

标签 java hibernate playframework one-to-one

我正在尝试在数据库中保存一个 UserOnline 对象,该对象与 User 具有 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 实际上为 null,该对象实际上并未保存。有什么想法吗?它没有给我一个错误,它只是没有创建记录。我还想知道如何从 User 对象开始创建 UserOnline 对象。

类似

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

相关对象可以(如果不存在则创建并以其他方式编辑)以这种方式保存吗?

用户.java

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

save()方法是from the play framework.

最佳答案

我猜这个问题与Play Framework有关。如果是这样,最好将其标记为这样,因为在 Play Framework 中使用 Hibernate 有一些特殊性,请参阅 Explicit save .

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

关于java - 在数据库中保存 OneToOne 映射对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034385/

相关文章:

mysql - PlayFramework Slick NoSuchMethodError

java - 玩2.4,报错: package play. *不存在

java - 我们如何为给定的一组数字生成 N 长度数字的唯一组合

java - 字段更改的 Hibernate 审计日志

java - 无法打开连接

java - 在 DispatcherServlet 中未找到带有 URI 的 HTTP 请求的映射 - 上下文组件扫描不起作用

scala - 如何将文件名保存到数据库中

java - 如何对十进制数执行 Integer.parseInt()?

java - 手动触发一个@Scheduled 方法

java - 如何在java中将camelCase字符串转换为下划线,保留一些大写,其余的小写?