Hibernate 休眠集合中元素的持久性
我有一个关于hibernate中对象的持久性的问题 上下文是我有一个具有多个角色的用户:Hibernate 休眠集合中元素的持久性,hibernate,Hibernate,我有一个关于hibernate中对象的持久性的问题 上下文是我有一个具有多个角色的用户: @Entity @Table(name="users") public class User implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="user_id") private Long idUser; @OneToMany @J
@Entity
@Table(name="users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id")
private Long idUser;
@OneToMany
@JoinColumn(name="user_id")
private Collection<Role> roles;
}
我想了解为什么我只需要保存角色r(使用persist),而不需要更新用户,例如(em.merge(u));尽管我已经修改了用户(在其集合角色中添加了一个角色;),因为您对托管对象所做的更改会被Hibernate自动持久化。Hibernate在其会话中保留对其托管对象的引用,并在提交事务之前检查会话中的实体是否已被修改。如果它们已被删除,那么它将执行适当的SQL查询以将更改写入数据库 这也可能发生在事务提交之前:调用flush()或执行查询时(以确保在执行查询之前修改数据库) 什么是托管实体
- 从Hibernate获取的任何实体:通过执行返回实体的查询、调用find()或getReference()或merge()、或通过浏览来自其他托管实体的关联(
例如,如果用户也被托管,则将返回托管实体)user.getRoles()
- 传递给
的任何实体persist()
请参见检查您的角色类映射,查看用户字段上是否有如下设置:
manytone(cascade=CascadeType.XXX)
,如果是,则表示当您保留角色时,用户将通过休眠自动保留
public class ShopDaoImpl implements ShopDAO{
@PersistenceContext
private EntityManager em;
@Override
public void attribuerRole(Role r, Long userID) {
User u = em.find(User.class, userID);
u.getRoles().add(r);
em.persist(r);
}
}