代码之家  ›  专栏  ›  技术社区  ›  Spooky

@SequenceGenerator-使用Eclipse Hibernate工具进行分配、反向工程

  •  1
  • Spooky  · 技术社区  · 14 年前

    我使用EclipseHibernate工具从我的Oracle数据库中创建带有JPA注释的域类。为了控制序列生成,我在hibernate.reventing.xml中添加了以下条目:

    <代码> ……BR/> <主键>
    <generator class=“sequence”>
    <param name=“sequence”>序列foo&u id</param>
    </Generator>
    </primary key>
    … < /代码>

    这将导致以下注释:

    <代码> @SequenceGenerator(name=“Generator”,SequenceName=“seq foo_id”)。 < /代码>

    不过,我需要像这样设置“allocationSize”:如果您需要

    <代码> @SequenceGenerator(name=“Generator”,SequenceName=“Seq foo_id”,AllocationSize=1) < /代码>

    是否可以在hibernate.reving.xml中以某种方式设置它?

    <主键>
    <generator class=“sequence”>
    <param name=“sequence”>序列foo&u id</param>
    </Generator>
    </primary key>

    这将导致以下注释:

    @SequenceGenerator(name = "generator", sequenceName = "SEQ_FOO_ID")

    但是,我需要像这样设置“allocationSize”:

    @SequenceGenerator(name = "generator", sequenceName = "SEQ_FOO_ID", allocationSize = 1)

    是否可以在hibernate.reving.xml中以某种方式设置它?

    5 回复  |  直到 8 年前
        1
  •  2
  •   meadlai    14 年前

    是的,你可以。 你必须重写revent类的策略。

    休眠帮助中心中有文档。

        2
  •  1
  •   Guillaume Husta    10 年前

    在当前版本的Hibernate工具中似乎不可能( 4.3.1.CR1 2014!

    序列相关的JPA注释是由该方法生成的。 generateAnnIdGenerator() 课堂上 EntityPOJOClass .
    GitHub中的代码: https://github.com/hibernate/hibernate-tools/blob/master/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java#L252

    源代码提取(GenerateAnnidGenerator()):
    builder.resetAnnotation( importType("javax.persistence.SequenceGenerator") ) .addQuotedAttribute( "name", "generator" ) // TODO: shouldn't this be unique, e.g. entityName + sequenceName (or just sequencename) ? .addQuotedAttribute( "sequenceName", properties.getProperty( org.hibernate.id.SequenceGenerator.SEQUENCE, null ) ); // TODO HA does not support initialValue and allocationSize

    JIRA中未发现问题( https://hibernate.atlassian.net/browse/HBX/ )对于这个问题。

        3
  •  1
  •   Jesús María Jurado Núñez    9 年前

    可能晚了,但正确的配置是:

    <hibernate-reverse-engineering>
        <schema-selection match-schema="SchemaName" />
        <table-filter match-name=".*"></table-filter>
        <table name="TableName">
            <primary-key>
                <generator class="org.hibernate.id.SequenceGenerator">
                    <param name="sequence">SequenceName</param>
                </generator>
                <key-column name="ColumnName" />
            </primary-key>
        </table>
    </hibernate-reverse-engineering>
    
        4
  •  0
  •   David    13 年前

    例如:

    <hibernate-reverse-engineering>
        <schema-selection match-schema="SchemaName" />
        <table-filter match-name=".*"></table-filter>
        <table name="TableName">
            <primary-key>
                <generator class="sequence">
                    <param name="sequence">SequenceName</param>
                </generator>
                <key-column name="ColumnName" />
            </primary-key>
        </table>
    </hibernate-reverse-engineering>
    

    :)

        5
  •  0
  •   Jesus M C    8 年前

    虽然没有像guillaume husta所说的那样得到官方的支持,但我还是设法做了一个小把戏,所以绕过了这个限制。而不是简单地说:

     <param name="sequence">MYSEQ</param>
    

    您可能会注意到生成器在开始和结束时只附加引号(“),因此您可以在SQL注入中执行类似的操作,您只需要结束引号的JPA注释的另一个参数,即使它不是真正使用的参数,例如参数“schema”。

       <param name="sequence">MYSEQ", allocationSize = 1, schema="MYSCHEME</param>