2010-05-17 3 views
1

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

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

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

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

Однако мне нужно установить " allocationSize», как это:

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

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

ответ

2

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

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

+0

не очень полезно ... –

0

Например:

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

:)

+1

Хорошо, но это не решает исходную задачу с «allocationSize» атрибут? Или я пропустил что-то? – Spooky

+0

извините, я ошибся. Мне пришлось использовать вместо последовательности, чтобы решить эту проблему. – David

1

Это не представляется возможным в текущей версии 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()): найдено в JIRA (https://hibernate.atlassian.net/browse/HBX/)
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

вопросов нет этой проблемы.

+0

Ha ve решил это для меня с поиском/заменой в Eclipse: search: @ SequenceGenerator. * " replace: $ 0, allocSize = 1 – Spooky

+0

Этот ответ был мне очень полезен - он установил меня на правильном пути. Я закончил использование пользовательского подкласса POJOExporter (указал на него задачу hbmtemplate ant с атрибутом exporterclass). Затем настроили несколько классов, которые зависали, чтобы, наконец, инфраструктура вызывала мой собственный метод generateAnnIdGenerator(), тогда я просто взломал строку, чтобы делать то, что мне нужно. – Shorn

1

Может быть поздно, но правильная конфигурация является:

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

Он использует класс org.hibernate.id.SequenceGenerator, похоже, не будет jpa –

0

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

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

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

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

Nice hack !!! ;-) –

 Смежные вопросы

  • Нет связанных вопросов^_^