当前位置: 首页 > 面试题库 >

休眠saveOrUpdate行为

蒋高超
2023-03-14
问题内容

有谁知道Hibernate如何知道在session.saveOrUpdate()调用时是要插入还是要更新数据库中的值?

到目前为止,我仅确定它不依赖于高速缓存中的信息,并且数据库中实体的存在由主键确定。


问题答案:

当您使用.saveOrUpdate()Hibernate时,将检查对象是否为瞬态对象(它没有标识符属性),如果是这样,它将通过生成标识符并将其分配给会话来使其持久化。如果对象已经具有标识符,它将执行.update()

从文档中:

saveOrUpdate()执行以下操作:

  • 如果对象在此会话中已经存在,则不执行任何操作
  • 如果与该会话关联的另一个对象具有相同的标识符,则引发异常
  • 如果对象没有标识符属性,请保存()
  • 如果对象的标识符具有分配给新实例化的对象的值,则将其保存()
  • 如果对象由“版本”或“时间戳记”版本控制,并且版本属性值与分配给新实例化对象的值相同,则save()否则更新()对象


 类似资料:
  • 问题内容: 通常我已经阅读过save()方法为对象生成新标识符,并且仅触发 INSERT 并保存它,它不会更新它,而saveOrUpdate()方法可能会 插入 或 UPDATE 记录。 但是根据我的经验,在这里我可以通过示例代码更好地进行解释, 假设有 A类 ,我觉得从记录 表A 的 所以现在我有了一个持久对象, 现在,我试图通过简单地修改某些字段来使用save方法保存记录, 现在我开除 因此,

  • 问题内容: 我们知道有机管局非常好的功能SaveOrUpdate当我们通过任何物体这种方法,知道数据是或新的记录将在数据库中添加。这是功能同时有或在我的代码,我来处理呢? 问题答案: jOOQ也是一样。如果更改记录的主键,则它将使用,否则将使用。 实际上,当您从数据库中读取记录时,调用将触发您所期望的。如果创建新记录,则将对其进行编辑。 在2.6中,克隆记录然后要求jOOQ对其进行更新有些困难(因

  • 问题内容: 我有一个hibernate映射,该映射一直工作到最近-尽管我确定这是我所做的某些更改的结果,但我似乎找不到它。 映射文件将字段定义为: 该类将该字段定义为: 运行此代码时,出现以下错误: 与此对应的数据库字段定义为: 我还有其他几个具有相似结构和定义的类,并且它们没有问题。但是,可能由于我最近所做的一些更改而导致,此特定映射将不再正常工作。 有什么建议么? 问题答案: 我不确定,但是您

  • 问题内容: 我收到了一个我无法解释的奇怪的Hibernate异常。告诉我我正在使用二级缓存,但是没有在哪里指定二级缓存。这是例外: 而我的: 有什么想法会触发此异常吗?提前致谢! 问题答案: Pau在hibernate.cfg.xml中写了hibernate.cache.region.factory_class: 唯一的例外是不言而喻的。您必须设置 属性。例如,使用ehcache将添加以下行: n

  • 问题内容: 有人可以透视一下JPA和Hibernate之间的区别吗?还是将这些互补的概念一起使用? 问题答案: 大致来说,JPA是java社区的一个标准,这里是specs,它是由Hibernate家伙实现(并扩展)的(此处提供一些信息)。作为规范,您将不会直接使用JPA,而是使用JPA实现。 请注意,如果要使用hibernateJPA扩展,将破坏与其他JPA实现的兼容性(尽管有些人会说“为什么要使

  • 问题内容: 我有一个Spring和Hibernate3在生产中运行良好的应用程序。以下是Spring的applicationContext.xml中会话工厂的配置 生产正常。 现在,对于另一个项目,我们正在迁移到Hibernate4。我们使用org.springframework.orm.hibernate4。*包中的Hibernate 4的SessionFactory,TransacionMan