java - JPA 2.1 外键未在 ManyToOne 级联上保存

标签 java hibernate jpa java-8 jpa-2.1

我有两个类(class)。

public class Reservation {
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval=true, mappedBy = "reservation")
    private List<Night> nights;  \\assume getters and setters
}

public class Night {
    @ManyToOne
    @JoinColumn(name = "RESERVATION_ID")
    private Reservation reservation;
}

我的存档是这样的:

Reservation r = new Reservation();
r.getNights().add(new Night()); 
return dao.save(r);

这行得通,因为它保存了 Reservation,也保存了 Night。但是当我查看数据库时,NIGHT 表中的列 RESERVATION_ID 为空。

在以前的项目中(在升级到 Java 8 和 JPA 2.1 之前),我不需要手动设置子对象的父对象来保存该关联。有什么变化,还是我做错了什么?

编辑:

这可以正确保存关联,但过去并不是必需的。

Reservation r = new Reservation();
Night n = new Night();
n.setReservation(r);
r.getNights().add(n);
return dao.save(r);

最佳答案

根据下面链接中提供的 JPA 示例,您需要在子对象中设置父对象。 你可以在Parent类中完成(子类的getter方法)

http://en.wikibooks.org/wiki/Java_Persistence/OneToMany

关于java - JPA 2.1 外键未在 ManyToOne 级联上保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24897183/

相关文章:

java - 如何从 firebase 获取用户名和全名的字符串列表?

java - 使用 Hibernate 查询 Oracle 时出现异常?

java - 如何像 Laravel 一样创建 HQL 查询?

java - 如何使用 Hibernate 作为持久性提供程序在 JPA 中添加 "outer join conditions with ON clause"?

java - 按日期时间对对象列表进行排序(无法解析方法 'compareTo' )

java - 使用文本文件复制到新的文本文件

java - 如何在 hadoop 配置中正确设置 s3a 配置?

java - 使用 Jackson 将 JSON 反序列化为 JPA 托管实体

java - 无法通过 @Query 将集合传递给构造函数

java - 插入批量更新没有错误,但受影响的行数为-2