如何使用 Hibernate 在 MySQL 中获取自增主键值

     2023-02-24     201

关键词:

【中文标题】如何使用 Hibernate 在 MySQL 中获取自增主键值【英文标题】:How to get the auto-increment primary key value in MySQL using Hibernate 【发布时间】:2011-09-14 20:15:03 【问题描述】:

我正在使用 Hibernate 访问 MySQL,并且我有一个带有自动增量主键的表。

每次我在表中插入一行时,我都不需要指定主键。但是插入新行后,如何使用hibernate立即获取相对主键?

或者我可以只使用 jdbc 来执行此操作?

【问题讨论】:

【参考方案1】:

一旦你持久化了对象,你应该可以调用 getId() 或者你的@ID 列,所以你可以从你的方法中返回它。您还可以使 Hibernate 一级缓存无效并再次获取它。

但是,为了可移植性,您可能希望考虑将 Hibernate 与序列样式 ID 生成一起使用。如果您需要,这将简化从 MySQL 的过渡。当然,如果你使用这种风格的生成器,你将能够立即获得 ID,因为 Hibernate 需要在持久化对象之前解析列值:

@Id
@GeneratedValue (generator="MY_SEQ")
@GenericGenerator( name = "MY_SEQ",
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
    parameters =  
        @Parameter(name = "sequence_name", value = "MY_SEQ"), 
        @Parameter(name = "initial_value", value = "1"), 
        @Parameter(name = "increment_size", value = "10") 
        )
@Column ( name = "id", nullable = false )
public Long getId () 

        return this.id;
    

它有点复杂,但除了更改 SEQUENCE 名称之外,它是您可以剪切和粘贴的东西。

【讨论】:

【参考方案2】:

当您保存休眠实体时,id 属性将为您填充。所以如果你有

MyThing thing = new MyThing();
...

// save the transient instance.
dao.save(thing);

// after the session flushes, thing.getId() should return the id.

实际上,在我的测试中,我几乎总是在持久化实体的 id 上使用assertNotNull,以确保保存有效。

【讨论】:

即使事务未提交且会话尚未关闭也会发生这种情况。【参考方案3】:

当您在 Hibernate 中调用 save() 方法时,对象不会立即写入数据库。当您尝试从数据库(从同一个表?)读取或显式调用 flush() 时,会发生这种情况。直到对应的记录没有插入到数据库表中,MySQL才会为其分配id。

所以,id 是可用的,但在 Hibernate 实际将记录插入 MySQL 表之前。

【讨论】:

【参考方案4】:

如果需要,您可以使用以下方法独立于对象获取下一个主键:

Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
Query query = session.createSQLQuery( "select nextval('schemaName.keySequence')" );

Long key = (Long) query.list().get( 0 );
return key;

【讨论】:

【参考方案5】:

在自动增量生成器类的情况下,当我们使用save() 方法时,它会返回主键(假设它的id)。所以它返回那个特定的id,所以你可以这样做

int id = session.save(modelClass);

然后返回id

【讨论】:

如何在使用 MySQL 后端的 Hibernate save() 调用上设置超时?

】如何在使用MySQL后端的Hibernatesave()调用上设置超时?【英文标题】:HowcanIsetatimeoutonaHibernatesave()callwithaMySQLbackend?【发布时间】:2011-10-2714:02:16【问题描述】:上周我们在一个基于Java、Hibernate的大型系统中遇到了问题。我们的... 查看详情

如何在 MySQL 上使用 Hibernate 批量插入递增的 ID?

】如何在MySQL上使用Hibernate批量插入递增的ID?【英文标题】:HowtobatchinsertincrementingIDswithHibernateonMySQL?【发布时间】:2013-03-0609:38:08【问题描述】:我正在尝试使用Hibernate插入n条记录。标准就像从表中获取MAXID并增加ID并保存记... 查看详情

如何在 Hibernate、MySQL 应用程序中使用 import.sql 文件将默认数据插入表中

】如何在Hibernate、MySQL应用程序中使用import.sql文件将默认数据插入表中【英文标题】:Howtoinsertdefaultdataintotableusingimport.sqlfileinHibernate,MySQLApplication【发布时间】:2013-01-1216:34:04【问题描述】:我正在使用SpringMVC(3.1版)、Hibernate... 查看详情

hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?

】hibernate-如何在mysql和oracle数据库中设置自动增量?【英文标题】:hibernate-howtosetautoincrementinbothmysqlandoracledatabases?【发布时间】:2015-10-1119:16:51【问题描述】:我在我的SpringMVC项目中使用休眠和MySQL数据库。我使用@GeneratedValue注... 查看详情

如何使用 Hibernate Named Query (HQL) 在 MYSQL 的时间戳字段中搜索当前日期?

】如何使用HibernateNamedQuery(HQL)在MYSQL的时间戳字段中搜索当前日期?【英文标题】:HowtosearchcurrentdateinTimestampfieldofMYSQLusingHibernateNamedQuery(HQL)?【发布时间】:2017-10-1809:55:33【问题描述】:我尝试使用以下方式传递日期但无法成功... 查看详情

如何使用 Hibernate/Spring boot 将 JSON 文件作为 JSON 数据类型存储在 mysql 中?

】如何使用Hibernate/Springboot将JSON文件作为JSON数据类型存储在mysql中?【英文标题】:HowtostoreJSONfileasaJSONdatatypeinmysqlusingHibernate/Springboot?【发布时间】:2020-05-1311:36:21【问题描述】:我尝试了几种将json文件存储在数据库中的方法... 查看详情

如何在 Spring 生态系统中使用 JPA hibernate 连接到不同的 mysql 数据库模式?

】如何在Spring生态系统中使用JPAhibernate连接到不同的mysql数据库模式?【英文标题】:HowcanIconnecttodifferentmysqldatabaseschemasusingJPAhibernateinSpringecosystem?【发布时间】:2019-04-0808:41:09【问题描述】:我的SpringBoot应用程序有MySql后端。... 查看详情

在jsp Servlet中使用hibernate在mysql中插入图像

】在jspServlet中使用hibernate在mysql中插入图像【英文标题】:InsertimageinmysqlusinghibernateinjspServlet【发布时间】:2019-05-1208:14:42【问题描述】:我不知道如何在jspservlet中使用休眠将图像插入数据库。我是#javaDeveloper的初学者提前致谢... 查看详情

如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?

】如何使用JPA/Hibernate注释将MySQLchar(n)列映射到实例变量?【英文标题】:HowtomapaMySQLchar(n)columntoaninstancevariableusingaJPA/Hibernateannotation?【发布时间】:2011-09-0615:48:47【问题描述】:我在类型为char(7)的MySQL表中的“语言”列上遇到JPA... 查看详情

如何在没有 AttributeConverter 或 customUserType 的情况下使用 Hibernate 5.2.10 MySQL JSON 支持映射到 Java 实体类?

】如何在没有AttributeConverter或customUserType的情况下使用Hibernate5.2.10MySQLJSON支持映射到Java实体类?【英文标题】:HowtouseHibernate5.2.10MySQLJSONsupportwithoutAttributeConverterorcustomUserTypetomaptoJavaEntityClass?【发布时间】:2017-11-1017:47:15【问题 查看详情

如何使用hibernate grails 3,mysql?

】如何使用hibernategrails3,mysql?【英文标题】:howusehibernategrails3,mysql?【发布时间】:2017-07-2800:19:14【问题描述】:我有MySQL服务器和2个应用程序:网站(grails3)和android应用程序。该数据库包含比赛时间表。android应用程序向Web服... 查看详情

如何在 MySQL 列中保存 DATE

...2019-05-2907:26:53【问题描述】:我正在使用SpringBoot、MySQL、Hibernate构建简单的REST。想使用Hibernate保存当前日期(自动生成),但每次我在PostMan中测试它时我都会得到Null@Entity@Table(name="purchase")publicclassPu 查看详情

无论如何,我无法在 Hibernate 中批处理 MySQL INSERT 语句

】无论如何,我无法在Hibernate中批处理MySQLINSERT语句【英文标题】:Nomatterwhat,Ican\'tbatchMySQLINSERTstatementsinHibernate【发布时间】:2014-02-2702:26:19【问题描述】:我目前正面临众所周知且常见的Hibernate插入批处理问题。我需要保存500... 查看详情

如何使用 Hibernate 从 Mysql 获取最后一条记录?

】如何使用Hibernate从Mysql获取最后一条记录?【英文标题】:HowtogetlastrecordfromMysqlusingHibernate?【发布时间】:2012-10-1516:50:22【问题描述】:List<Lahetys>last=session.createQuery("fromlahetysorderbylahetysNroDESCLIMIT1").list();在我得到的日志中... 查看详情

使用 Hibernate 在 MySQL 时间戳列中存储毫秒

】使用Hibernate在MySQL时间戳列中存储毫秒【英文标题】:StoringmillisecondsinMySQLtimestampcolumnusingHibernate【发布时间】:2016-04-2216:36:16【问题描述】:我正在尝试使用Hibernate在MySQL的时间戳列中存储带有毫秒的javaDate,但毫秒始终存储... 查看详情

如何使用 HIbernate 作为 BLOB 将此图像保存到 MySQL 数据库?

】如何使用HIbernate作为BLOB将此图像保存到MySQL数据库?【英文标题】:HowtosavethisimagetoMySQLdatabaseusingHIbernateasBLOB?【发布时间】:2017-10-2202:46:42【问题描述】:如何使用Hibernate将此上传的图像保存到MySQL数据库?我需要将此图像转... 查看详情

如何将 Hibernate 与 MySQL 连接

】如何将Hibernate与MySQL连接【英文标题】:HowtoconnectHibernatewithMySQL【发布时间】:2018-09-3006:15:55【问题描述】:我想将Hibernate与MySQL连接起来。我尝试了所有方法,但我仍然收到此错误。我正在使用Hibernate版本。avr.19,20181:55:21PMorg... 查看详情

在MYSQL中使用hibernate注解设置默认值

】在MYSQL中使用hibernate注解设置默认值【英文标题】:SetdefaultvaluesusinghibernateannotationsinMYSQL【发布时间】:2012-10-1518:14:46【问题描述】:我在互联网上搜索并看到了有关在mysql中使用休眠注释在实体类中设置默认值的想法,并且... 查看详情