2010-05-17 125 views
1

我使用Eclipse Hibernate Tools從Oracle數據庫創建帶有JPA註釋的域類。爲了控制序列生成我已經添加了以下項hibernate.reveng.xml中:@SequenceGenerator - allocationSize,使用Eclipse進行逆向工程Hibernate工具

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

這將導致以下注釋:

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

不過,我需要設置「分配大小「如下:

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

是否可以在hibernate.reveng.xml中以某種方式進行設置?

回答

2

是的,你可以。 你必須重寫reveng類的策略。

Hibernate幫助中心裏有文檔。

+0

不是非常有幫助... – 2014-07-23 14:35:48

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 2011-04-20 06:45:14

+0

抱歉,我錯了,我不得不使用來代替序列來解決這個問題。 – David 2011-04-20 12:54:50

1

它似乎並沒有在2014年最新版本的Hibernate工具(4.3.1.CR1)成爲可能!

相關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 /替換:搜索:@ SequenceGenerator *」代替 :$ 0,allocationSize = 1 – Spooky 2014-09-11 09:19:08

+0

這個答案是最有幫助的我 - 它讓我在正確的軌道上。 我最終使用了一個自定義的POJOExporter子類(使用exporterclass屬性將hbmtemplate ant任務指向它)。然後定製了幾個掛起的類,最後,框架調用了我自己定製的generateAnnIdGenerator()方法,然後我只是劈開了字符串來做我需要的。 – Shorn 2015-08-05 04:19:58

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 – 2016-10-14 10:33:58

0

雖然沒有官方支持的紀堯姆Husta說,我成功地做到了一招,以便繞過這個限制。而不是簡單地說:

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

您可能會注意到塔發電機只在起點和終點追加引號(「),所以你可以做類似的SQL注入做了什麼,你只需要在JPA註釋的另一個參數結束報價甚至它沒有真正使用,例如參數「模式」

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

尼斯破解! ;-) – 2017-06-07 12:01:41