OptimizerFactory$HiLoOptimizer doesn't move internal idvalue to new slot when hiValue
is reached
------------------------------------------------------------------------------------------------
Key: HHH-3505
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-3505
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.2.4
Environment: Hibernate 3.2.4
Reporter: Björn Schmidt
When the currently generated id-value has reached the TableGenerator's hivalue, all
that is updated is the hivalue which is read in via the nextValue() callback. But the
current idvalue needs to be readjusted to a new slot according to the new hiValue, because
otherwise it may run into slots already assigned to and used by other applications. In our
case, we got massive amounts of unique constraint-violations on many primarykey columns.
Original Source:
public synchronized Serializable generate(AccessCallback callback) {
if ( lastSourceValue < 0 ) {
lastSourceValue = callback.getNextValue();
while ( lastSourceValue <= 0 ) {
lastSourceValue = callback.getNextValue();
}
hiValue = ( lastSourceValue * incrementSize ) + 1;
value = hiValue - incrementSize;
}
else if ( value >= hiValue ) {
lastSourceValue = callback.getNextValue();
hiValue = ( lastSourceValue * incrementSize ) + 1;
}
return make( value++ );
}
This should look like:
public synchronized Serializable generate(AccessCallback callback) {
if ( lastSourceValue < 0 ) {
lastSourceValue = callback.getNextValue();
while ( lastSourceValue <= 0 ) {
lastSourceValue = callback.getNextValue();
}
hiValue = ( lastSourceValue * incrementSize ) + 1;
value = hiValue - incrementSize;
}
else if ( value >= hiValue ) {
lastSourceValue = callback.getNextValue();
hiValue = ( lastSourceValue * incrementSize ) + 1;
// Adjust value to new Idslot.
------> value = hiValue - incrementSize;
}
return make( value++ );
}
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira