当前位置: 首页 > 知识库问答 >
问题:

将 null 另存为 id,Hibernate [重复]

乜钱明
2023-03-14

我处于一个奇怪的位置,我需要将< code>@Entity的< code>@Id保存为< code>null

整个项目是使用hibernate和实体构建的。但是对于这个遗留实体,表本身有一个触发器来生成ID。

因此,尝试插入除null之外的任何内容都将导致错误。

当尝试<代码>时。save() id为空的实体,hibernate将抛出

org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()

编辑:

澄清一下,我需要在 ID 列为空的情况下执行 .save(),因为:

表中的触发器将(在任何插入之前)检查ID是否为空,然后执行SELECT以获取最后一个ID并将其递增1,最后将此新行插入表中。如果ID不是空,则触发器将出错。

共有1个答案

袁桐
2023-03-14

只需将id标记为由底层数据库自动生成:

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

GenerationType.IDENTITY通常是为PK设置为自动增量而设计的,但是,从JPA的角度来看,它只是将生成id的职责转移到数据库引擎。这在您的情况下是通过使用触发器来发生的。

 类似资料:
  • 我是springsecurity的新手,尝试在我的项目中使用springstecurity,因为这个错误不断出现 这是我的道课 这是我的凭证类 我认为错误存在于此代码中 这是用户详细信息 这是用户详细信息的实现 这就是正在流行的错误 最后,这是我的数据库,其中存储了用户名和密码的数据库表 这个错误让我发疯,我做了一切事情来阻止这一点,但这是一次又一次的弹出,基本上我的项目是logIn系统,其中一个

  • 我想在ListView的项目Click上显示地图...因此,我实现了如下两个片段: 在PlaceHolderFragment.java中,我将设置为: 在MapsFragment.java中,我将地图显示为:

  • 我实现了一个Hibernate拦截器(扩展了EmptyInterceptor)并实现了onFlushDirty方法,以便在保存对象时将该对象的属性设置为null。代码如下所示: 不幸的是,即使我取消了对象的值,记录仍然保存到数据库中。奇怪的是,当我修改该对象时,更改被保存到数据库中。 对象和属性都是实体。

  • 我有两张桌子。括号中的属性名和列名。 表Animal有字段:animalId(animalId)、name(name)、owner(owner_id)owner与owner对象和owner_id列是多对一关系 表所有者有字段:ownerId(owner_id),name 我想选择一个ID为5的动物的主人。冬眠怎么能做到呢?

  • 我们将Infinispan 10.8.1配置为在我的Spring Boot应用程序中用作Hibernate二级缓存(2LC),它按预期工作。配置在infinispan.xml中完成,传输配置指向一个cluster.xml文件,该文件配置JGroup以使用TCP设置4台机器的集群。 我们还希望在代码中使用Infinispan来缓存不需要持久化的随机实例。然而,我们没有找到重用Hibernate使用的

  • 这里会有什么问题吗? 这是我的主要类和我的main.xml,以及我使用的一个相关类(您还会在底部找到错误日志) 主类 main.xml