2010-05-17 4 views
1

Eclipse 하이버 네이트 도구를 사용하여 Oracle 데이터베이스에서 JPA 주석이있는 도메인 클래스를 만듭니다. 나는 hibernate.reveng.xml에 다음 항목을 추가 한 시퀀스 생성을 제어하려면@SequenceGenerator - allocationSize, 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 클래스의 전략을 다시 작성해야합니다.

최대 절전 모드 도움말 센터에 문서가 있습니다. 예를 들어

+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

그것은 2014 년 최대 절전 모드 도구의 최신 버전 (4.3.1.CR1)에서 가능하지 않는 것!

시퀀스 관련 JPA 어노테이션은 generateAnnIdGenerator() 클래스 EntityPOJOClass에 의해 생성됩니다. GitHub의에서
코드 : 소스 코드 (generateAnnIdGenerator())의 https://github.com/hibernate/hibernate-tools/blob/master/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java#L252

추출 :이 문제에 대한 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 검색 : @ SequenceGenerator. * " 대체 : $ 0, allocationSize = 1 – Spooky

+0

이 대답은 나에게 가장 도움이되었다. 올바른 답을 찾았다. 사용자 정의 POJOExporter 서브 클래스 (exporterclass 속성을 사용하여 hbmtemplate ant 태스크를 가리킨다.)를 사용했다. 그런 다음 매달아 몇 가지 클래스를 사용자 정의하여 프레임 워크가 내 자신의 사용자 정의 generateAnnIdGenerator() 메소드를 호출하고 나서 필요한 문자열을 해킹했습니다. – Shorn

1

아마 늦었지만 올바른 설정은 다음과 같습니다

기욤 Husta 말하는대로 공식적으로 지원되지는 않지만
<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

, 나는 우회 있도록이 제한을 트릭을 할 수 있었다. 대신 단순히으로 넣어 : 발전기는 시작과 끝 부분에 따옴표 (")를 추가 그쪽은 SQL 주입에서 수행 비슷한 뭔가를 할 수 있도록

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

당신은, 알 수 있습니다, 당신은 단지 JPA 주석의 또 다른 매개 변수를 필요로하는 인용도는 정말 예를 들어, 매개 변수 "스키마"매우 도움이되지

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

멋진 해킹 !!! ;-) –