【发布时间】:2015-12-11 15:38:02
【问题描述】:
我有一个 User(父)和一个 Home(子)实体,它们遵循单向的一对多关系。
我的问题是,当向User 添加新的Home 时,新创建和持久化的Home 没有id。这是正常的吗?如果我想要 id,是否需要手动持久化孩子?
这些是我的实体:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "firstName")
private String firstName;
@NotNull
@Column(name = "lastName")
private String lastName;
@NotNull
@Column(name = "email")
private String email;
@OneToMany(targetEntity = Home.class, fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "userId", referencedColumnName = "id", nullable = false)
private List<Home> homes;
public User() {
}
public void addHome(Home home) {
homes.add(home);
}
}
@Entity
@Table(name = "home")
public class Home implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "isActive")
private Boolean isActive;
public Home() {
}
}
以及更新父级的代码:
Home home = HomeParser.parse(homeDTO);
User user = userService.findById(userId);
user.addHome(home);
userService.update(user); // delegate call to getEntityManager().merge(user);
在这一点上,我假设我将拥有home 拥有它在持久化到 db 时刚刚给出的 id,但事实并非如此。
我已经尝试将 insertable = false 添加到主页的 id 的 @Column,正如 here 所指出的那样,但它也不起作用。
【问题讨论】:
-
如果你为你的私有
id字段添加公共设置器有什么不同吗? (建议为所有字段设置公共 getter 和 setter。) -
@SteveChambers 我在编辑中删除了这些,但我有 Lombok Getter 和 Setter 注释
标签: java hibernate jpa one-to-many