Почему последовательность с именем hibernate_sequence создается с помощью JPA с использованием Hibernate с диалектом Oracle 10g? - PullRequest
7 голосов
/ 17 июня 2010

Все мои объекты используют этот тип @Id

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MYENTITY_SEQ")
@SequenceGenerator(name = "MYENTITY_SEQ", sequenceName = "MYENTITY_SEQ")
@Column(name = "MYENTITY", nullable = false)
private Long id;

или

@Id
@Column(name = "MYENTITY")

Я считаю, что последовательность Oracle с именем hibernate_sequence создается всегда. Почему это так? И как мне этого избежать?

Я использую JPA1 с Hibernate 3 и диалектом Oracle 10g.

Ответы [ 3 ]

10 голосов
/ 02 мая 2012

HIBERNATE_SEQUENCE используется с REVINFO-entity для создания номеров ревизий. Если вы хотите использовать другую последовательность, вы должны создать свой собственный объект ревизии.

Помогите с этим: http://docs.jboss.org/hibernate/envers/3.5/reference/en-US/html/revisionlog.html

4 голосов
/ 17 июня 2010

Я вижу следующий код в org.hibernate.id.SequenceGenerator:

public void configure(Type type, Properties params, Dialect dialect) throws MappingException {
    ObjectNameNormalizer normalizer = ( ObjectNameNormalizer ) params.get( IDENTIFIER_NORMALIZER );
    sequenceName = normalizer.normalizeIdentifierQuoting(
            PropertiesHelper.getString( SEQUENCE, params, "hibernate_sequence" )
    );
    parameters = params.getProperty( PARAMETERS );

    if ( sequenceName.indexOf( '.' ) < 0 ) {
        final String schemaName = normalizer.normalizeIdentifierQuoting( params.getProperty( SCHEMA ) );
        final String catalogName = normalizer.normalizeIdentifierQuoting( params.getProperty( CATALOG ) );
        sequenceName = Table.qualify(
                dialect.quote( catalogName ),
                dialect.quote( schemaName ),
                dialect.quote( sequenceName )
        );
    }
    else {
        // if already qualified there is not much we can do in a portable manner so we pass it
        // through and assume the user has set up the name correctly.
    }

    this.identifierType = type;
    sql = dialect.getSequenceNextValString( sequenceName );
}

Где третий параметр PropertiesHelper.getString(String, Properties, String) является значением свойства по умолчанию.

Так что я испытываю соблазн сказать, что где-то у вас есть Id, который не «должным образом» аннотирован. Может быть, вам стоит провести небольшой сеанс отладки.

0 голосов
/ 06 августа 2010

Я подозреваю, что это потому, что я использую Hibernate Envers, так как я дважды проверил свои сущности, и все они имеют правильные сопоставления @Id.

...