gpt4 book ai didi

java - hibernate 中的 save() 和 persists() 方法在级联方面有什么区别?

转载 作者:行者123 更新时间:2023-12-01 19:13:46 25 4
gpt4 key购买 nike

enter image description here

                                     EER Diagram

*请注意,类(class)实体与此问题无关

这里我使用 save() 方法将 Instructor 对象保存到数据库中。[Instructor 和 InstructorDetails 之间存在级联关系,允许一对一双向,因此保存讲师对象也会保存 coachDetails 对象]。在这种情况下,我收到对象引用未保存的 transient 实例的错误 - 在刷新之前保存 transient 实例。但是当我使用 persists() 方法时,该方法没有出现。所以但是当我更改时级联类型改为 CascadeType.ALL 用 save() 方法也可以。但是你可以看到我只是在下面的代码中删除了 REMOVE 的级联类型,那么它会对 save() 这样的方法产生什么影响?

教练模型类(class)

公开课讲师{

@OneToOne(cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
//Here you can see I just only neglected the cascade type of REMOVE only
@JoinColumn(name="instructor_detail_id")
private InstructorDetails instructorDetail;
//
//

}

InstructorDetails 模型类

公共(public)类(class)讲师详细信息{

 @OneToOne(mappedBy ="instructorDetail",cascade = 
{CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH} )
//Here you can see I just only neglected the cascade type of REMOVE only
private Instructor instructor;
//
//

}

最佳答案

persist() 使 transient 实例持久化。但是,它不保证标识符值会立即分配给持久化实例,分配可能会在刷新时发生。 persist() 还保证,如果在事务边界之外调用 INSERT 语句,它不会执行该语句。

save() 确实保证返回一个标识符。如果必须执行 INSERT 才能获取标识符(例如“身份”生成器,而不是“序列”),则无论您是在事务内部还是外部,此 INSERT 都会立即发生。

您可以通过Hibernate Documentation获取更多信息页,点11.2。使对象持久化

关于java - hibernate 中的 save() 和 persists() 方法在级联方面有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59443163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com