[hibernate-issues] [Hibernate-JIRA] Closed: (HHH-3523) org.hibernate.id.enhanced.SequenceStyleGenerator causes org.hibernate.MappingException with SAPDB and DB2Dialect
Steve Ebersole (JIRA)
noreply at atlassian.com
Thu Jun 4 09:27:13 EDT 2009
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3523?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Ebersole closed HHH-3523.
-------------------------------
Assignee: Steve Ebersole
Resolution: Rejected
Have to assume this is out of date, or was a duplicate of another issue. The current code should not allow this to occur. SequenceStyleGenerator contains this piece of code in its configure method:
if ( dialect.supportsSequences() && !forceTableUse ) {
if ( OptimizerFactory.POOL.equals( optimizationStrategy ) && !dialect.supportsPooledSequences() ) {
forceTableUse = true;
log.info(
"Forcing table use for sequence-style generator due to pooled optimizer selection where db does not support pooled sequences"
);
}
}
whcih is essentially saying to switch to a backing table (instead of a backing sequence) if the POOLed optimization is in effect but the dialect does not support it.
> org.hibernate.id.enhanced.SequenceStyleGenerator causes org.hibernate.MappingException with SAPDB and DB2Dialect
> ----------------------------------------------------------------------------------------------------------------
>
> Key: HHH-3523
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3523
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.3.1
> Environment: Hibernate 3.3.1.GA
> Generation of DDL scripts for DB2Dialect and SAPDBDialect
> Reporter: Damir Malenicic
> Assignee: Steve Ebersole
> Attachments: db2-sapdb-bug.zip
>
>
> While generating DDL scripts for mapping files that declare id <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator"> the following exception is thrown:
> org.hibernate.MappingException: Dialect does not support pooled sequences
> at org.hibernate.dialect.Dialect.getCreateSequenceString(Dialect.java:701)
> at org.hibernate.dialect.Dialect.getCreateSequenceStrings(Dialect.java:659)
> at org.hibernate.id.enhanced.SequenceStructure.sqlCreateStrings(SequenceStructure.java:139)
> at org.hibernate.id.enhanced.SequenceStyleGenerator.sqlCreateStrings(SequenceStyleGenerator.java:328)
> at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:945)
> at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:129)
> at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
> I suspect the cause is in
> org.hibernate.dialect.Dialect#getCreateSequenceString(String sequenceName, int initialValue, int incrementSize)
> if ( supportsPooledSequences() ) {
> return getCreateSequenceString( sequenceName ) + " start with " + initialValue + " increment by " + incrementSize;
> }
> throw new MappingException( "Dialect does not support pooled sequences" );
> This call requires not just that dialect supports sequences but that dialect supports pooled sequences.
> But the algorithm that tries to determine whether the table should be used to emulate the sequence lets the dialects that supports sequences but not pooled sequences to slip through. It looks like the DB2 and SAPDB dialects fail in this category because of:
> org.hibernate.id.enhanced.SequenceStyleGenerator#configure(Type type, Properties params, Dialect dialect)
> ...
> if ( dialect.supportsSequences() && !forceTableUse ) {
> if ( OptimizerFactory.POOL.equals( optimizationStrategy ) && !dialect.supportsPooledSequences() ) {
> forceTableUse = true;
> log.info(
> "Forcing table use for sequence-style generator due to pooled optimizer selection where db does not support pooled sequences"
> );
> }
> }
> To workaround the problem I have created my generator that overrides SequenceStyleGenerator#configure, somethng like:
> public void configure(Type type, Properties params, Dialect dialect) throws MappingException {
> if (dialect.supportsSequences() && !dialect.supportsPooledSequences()) {
> params.setProperty(FORCE_TBL_PARAM, "true");
> }
> super.configure(type, params, dialect);
> Attached is a zip file with a small maven project with unit-test that replicates the problem. It generates DDL for different databases: Hipersonic, Derby, Oracle, MySql, PostgreSQL, MSSQL, DB2, and SAPDB. The data-model contains 2 tables Person and Event in many-to-many relation.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list