Java 配置id序列休眠生成器

Java 配置id序列休眠生成器,java,oracle,hibernate,Java,Oracle,Hibernate,我是否可以将Hibernate配置为在实际插入之前不将select seq.nextval from dual作为单独调用 org.hibernate.jdbc.AbstractBatcher about to open PreparedStatement (open PreparedStatements: 0, globally: 0) org.hibernate.SQL select SEQUENCE_1.nextval from dual org.hibernate.id.Sequen

我是否可以将Hibernate配置为在实际插入之前不将select seq.nextval from dual作为单独调用

org.hibernate.jdbc.AbstractBatcher about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 
org.hibernate.SQL select SEQUENCE_1.nextval from dual 
org.hibernate.id.SequenceGenerator auditor50 - Sequence identifier generated: 122797 
org.hibernate.jdbc.AbstractBatcher auditor50 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 

<class..>
    <id column="ID" name="id" type="long">
       <generator class="sequence">
          <param name="sequence">SEQUENCE_1</param>
       </generator>
    </id>      
</class>
org.hibernate.jdbc.AbstractBatcher即将打开PreparedStatement(打开PreparedStatements:0,全局:0)
org.hibernate.SQL从dual中选择SEQUENCE_1.nextval
org.hibernate.id.SequenceGenerator auditor50-生成的序列标识符:122797
org.hibernate.jdbc.AbstractBatcher auditor50-即将关闭PreparedStatement(打开PreparedStatements:1,全局:1)
序列1

我认为这是不可能的。但我不知道这会有什么不同。如果出于性能原因要执行此操作:

  • 您是否衡量了两种方法之间的显著差异
  • 您知道Hibernate的序列ID生成器实际上是一个hilo序列ID生成器,并且它每N次插入(N默认值为50,IIRC)只会获得下一个值,这肯定比您想象的要快吗

  • 那么它如何获得要插入的值呢?插入到表(ID)中的值(SEQUENCE.NEXTVAL);我不确定这是否会停止当前行为,但如果数据库中的默认值是
    SEQUENCE.NEXTVAL
    ?1会怎么样。我还没有真正测量它,但我在每个事务中插入200多行2。对我来说,它每插入一行,而不是每插入50行2。我的错误。当通过注释进行配置时,序列生成器实际上就是seqhilo生成器。对于XML,必须使用class=“seqhilo”而不是class=“sequence”