Java 如何在保存到数据库之前获取生成器Id?

Java 如何在保存到数据库之前获取生成器Id?,java,mysql,hibernate,generator,Java,Mysql,Hibernate,Generator,如何在保存到数据库之前获取生成器id?我进行了很多搜索,但它可以解决我的问题。我的问题是使用SpringMVC、hibernate和mysql import javax.persistence.*; @Entity @Table(name = "Test") public class Test { private Integer id; private String name; @Id @Column(name = "id") @GeneratedV

如何在保存到数据库之前获取生成器id?我进行了很多搜索,但它可以解决我的问题。我的问题是使用SpringMVC、hibernate和mysql

import javax.persistence.*;

@Entity
@Table(name = "Test")
public class Test {
    private Integer id;
    private String name;


    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.TABLE,generator = "Test_gen")
    @TableGenerator(name = "Test_gen",table = "SerialNum",pkColumnName = 
    "tableName",valueColumnName = "tableValue",pkColumnValue = "Test")
    public Integer getId() {
       return id;
    }

    public void setId(Integer id) {
       this.id = id;
    }

    public String getName() {
       return name;
    }

    public void setName(String name) {
       this.name = name;
    }
}
或者如何以其他方式使用hibernate生成器?像这样:

public static long getGeneratorId(String entityName){
      return Hibernate.generatorId();
}

这里是获取当前表标识的解决方案之一,因为您已经在使用Hibernate,所以可以使用以下代码行:

 session.CreateSqlQuery( "SELECT `AUTO_INCREMENT` " +
 "FROM  INFORMATION_SCHEMA.TABLES " +
 "WHERE TABLE_SCHEMA = 'Your_DB_NAME' "+
 "AND   TABLE_NAME   = 'Test' ").uniqueResult(); 

这里是获取当前表标识的解决方案之一,因为您已经在使用Hibernate,所以可以使用以下代码行:

 session.CreateSqlQuery( "SELECT `AUTO_INCREMENT` " +
 "FROM  INFORMATION_SCHEMA.TABLES " +
 "WHERE TABLE_SCHEMA = 'Your_DB_NAME' "+
 "AND   TABLE_NAME   = 'Test' ").uniqueResult(); 

您所说的“保存前”是什么意思???自动生成的ID将不可用,除非事务已完成saved@RavinderReddy第一步:获取生成器Id,第二步:将测试保存到数据库。如果我没有弄错,您想在保存到数据库之前知道当前表标识号吗?@GustiArya是,你说得对。你说的“保存前”是什么意思???除非交易成功,否则自动生成的ID将不可用saved@RavinderReddy第一步:获取生成器Id,第二步:将测试保存到数据库。如果我没有弄错,您想在保存到数据库之前知道当前表的标识号吗?@GustiArya是的,您是对的。