我有两个实体类Organization和User具有一对多关系(为了简单起见,Groovy代码!):
@Entity
class Organisation {
@Id Long id
String name
@OneToMany
List<User> users
}
@Entity
class User {
@Id Long id
String username
@ManyToOne(optional=false, cascade = CascadeType.Persist)
Organisation organisation
}
当我为一个新的组织创建一个新的用户时,一切都运行良好:
def user = new User(organisation: new Organisation(...))
但当我使用一个现有的组织,将其设置为新用户的组织属性时,我会得到一个错误:
def user = new User(organisation: organisationRepository.findOne(orgId))
userRepo.save(user)
将导致:
org.hibernate.PersistentObjectException:传递给Persist:Organization的分离实体
我知道不能对一个分离的实体调用persist。但是在这种情况下,由于我没有更改组织实体本身的任何内容,所以我认为hibernate会允许这样做。
我试图将cascade={cascadeType.persist,cascadeType.merge}
放入ManyToOne批注中,但结果是同一个错误。
我想要存档的东西在hibernate中是不可能实现的,还是我在某个地方出现了思维错误?
你在正确的方向上:
cascade = {CascadeType.Persist, CascadeType.Merge}
问题是,当您仍然执行save
操作时,持久化提供程序会尝试级联persist
操作,因此它最终会尝试持久化已经设置了@ID并已分离的组织实体。
您必须做的是执行合并
而不是保存
。
在这种情况下,新的实体将被持久化,并且组织将被合并回持久化上下文中,因此允许整个操作成功。
请记住,当您使用merge并希望在之后对传递的实体执行操作时,您需要将结果赋值给一个新变量并对其执行操作,例如:
User mergedUser = userRepo.merge(user);
// operations on mergedUser from now on
null 我能找到的使用JPA/Hibernate的唯一有效解决方案是执行以下步骤。这是因为hibernate将实体保留在第一级缓存中,直到事务结束。 创建新实体 强制快速刷新() 分离实体 这样做的开销是 null 使用JDBC或JdbcTemplate,但您必须为实体编写自己的插入 所以问题是:是否存在同时坚持和分离的可能性,或者甚至更好地坚持而不成为被管理的?
我是JPA和Hibernate的新手。我有两个实体,供应商和产品,如下所述。 我的问题与@ManyToOne注释中使用属性 有关。我希望用@ManyToOne注释的相应列不为空。但是,当我使用以下测试测试实体的持久性时: 其中createOrUpdateEntity方法是DAO Bean对象的一部分 我收到错误: 编辑:实现此示例,该示例使用注释为 null 可为 null = false 的@M
问题内容: 我有一个引用实体Bar的实体Foo: 当我坚持使用新的Foo时,它可以引用新的Bar或现有的Bar。当它得到一个现有的Bar(恰好是分离的)时,我的JPA提供程序(hibernate)抛出以下异常: 当我确保对Bar的引用进行管理(附加)时,或者当我在关系中省略级联PERSIST时,一切都很好。 但是,两种解决方案都不是100%令人满意的。如果我删除了级联持久化,显然我不能再以新Bar
问题内容: 我正在使用Spring Boot并通过jpahibernate。我正在使用JpaRepository接口来实现我的存储库。与以下UserRepository一样 我想实现以下目标 加载用户实体。 更改实体对象的状态,例如user.setName(“ foo”) 进行外部系统Web服务调用。将通话结果保存到数据库中 仅在成功响应此Web服务调用后,才将用户的新状态保存在存储库中。 以上所
我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗
我尽力解释了这个问题,如果你需要更多的信息,请告诉我。