【问题标题】:auto creation of sequence using hibernate tool使用休眠工具自动创建序列
【发布时间】:2013-03-01 09:25:15
【问题描述】:

我想使用休眠工具(pojo to sql)生成序列。而且绝对可以正常工作。

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
@SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ" )
@Column(name="id")
public Long getId() {
    return id;
}

这段代码在sql下面生成

create sequence RTDS_ADSINPUT_SEQ;

问题是我想指定类似的属性

INCREMENT BY,NOCACHE CYCLE

最终的 ddl 脚本应该如下所示

CREATE SEQUENCE  RTDS_ADSINPUT_SEQ  MINVALUE 1 MAXVALUE
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  ORDER  CYCLE ;

但目前我看到hibernate只支持name, sequncename,allocation,initialvalue

如果我可以将这些属性作为注释包含在 pojo 中,请告诉我。

【问题讨论】:

    标签: java hibernate sequence


    【解决方案1】:

    我在 Hibernate 源代码 (4.2.7) 中查找了它。无法使用注释(无论是 JPA 还是 Hibernate)来指定它。

    但是您可以提供自己的方言来实现此目的。

    public class MyOwnOracleDialect extends Oracle10gDialect {
    
        @Override
        protected String getCreateSequenceString(final String sequenceName, final int initialValue, final int incrementSize)
            throws MappingException {
            String createSequenceString = super.getCreateSequenceString(sequenceName, initialValue, incrementSize);
            return createSequenceString + " NOCACHE ORDER CYCLE"; // modify this string as you like
        }
    }
    

    拥有这样的实体

    @Entity
    public class MyEntity {
    
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
        @SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ", allocationSize = 1, initialValue = 0)
        @Column(name="id")
        private Long id;
    
        // ...
    
    }
    

    您可以按照 Hibernate 文档 (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects) 中的说明设置新的方言

    【讨论】:

      【解决方案2】:

      我认为您正在寻找类似的东西

          <id name="pk_field" column="column_name">
              <generator class="sequence">
                  <param name="sequence">sequence_name</param>
                  <param name="parameters">START WITH 5 INCREMENT BY 10</param>
              </generator>
          </id>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 1970-01-01
        • 2014-04-13
        • 2011-04-24
        • 2015-04-05
        相关资源
        最近更新 更多