2010-05-17 79 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