为什么使用带有Oracle 10g方言的Hibernate使用JPA创建一个名为hibernate_sequence的序列?

我的所有实体都使用这种类型的@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") 

我发现总是创建一个名为hibernate_sequence的Oracle序列。 为什么会这样? 我怎么能避免这个?

我正在使用JPA1和Hibernate 3以及Oracle 10g方言。

HIBERNATE_SEQUENCE与REVINFO实体一起用于创建修订号。 如果要使用不同的顺序,则应创建自定义修订实体。

帮助: http : //docs.jboss.org/hibernate/envers/3.5/reference/en-US/html/revisionlog.html

我在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 。 也许你应该执行一些调试会话。

我怀疑是因为我正在使用Hibernate Envers,因为我已经仔细检查了我的实体,并且所有这些实体都有正确的@Id映射。