@SequenceGenerator - allocSize, обратный инжиниринг с Eclipse Hibernate Tools - PullRequest
1 голос
/ 17 мая 2010

Я использую Eclipse Hibernate Tools для создания классов доменов с аннотациями JPA из моей базы данных Oracle. Для управления генерацией последовательности я добавил следующую запись в файл hibernate.reveng.xml:

...<br> <primary-key><br> <generator class="sequence"><br> <param name="sequence">SEQ_FOO_ID</param><br> </generator><br> </primary-key><br> ...

Это приводит к следующей аннотации:

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

Однако мне нужно установить «allocSize» следующим образом:

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

Можно ли как-то установить это в hibernate.reveng.xml?

Ответы [ 5 ]

2 голосов
/ 14 октября 2016

хотя это официально не поддерживается, как говорит Гийом Хуста, мне удалось сделать трюк, чтобы обойти это ограничение. Вместо того, чтобы просто сказать:

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

Вы можете заметить, что генератор добавляет кавычки (") только в начале и в конце, так что вы можете сделать нечто подобное, как в SQL-инъекции, вам нужен только другой параметр аннотации jpa, который заканчивает кавычку, даже если она не используется на самом деле, например параметр "схема"

   <param name="sequence">MYSEQ", allocationSize = 1, schema="MYSCHEME</param>
2 голосов
/ 20 сентября 2010

Да, вы можете. Вы должны переписать стратегию класса реванга.

В справочном центре Hibernate есть документ.

1 голос
/ 06 июля 2015

Возможно поздно, но правильный конфиг:

<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>
1 голос
/ 23 июля 2014

Это представляется невозможным в текущей версии Hibernate Tools ( 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 ) ); <strong>// TODO HA does not support initialValue and allocationSize</strong>

Не найдено проблем в JIRA (https://hibernate.atlassian.net/browse/HBX/) для этой проблемы.

0 голосов
/ 19 апреля 2011

Например:

<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>

:)

...