HHH-11209 : Added test case for testing debug logging when collection is detached during rollback
(cherry picked from commit 22ad668b88
)
This commit is contained in:
parent
aea7b31996
commit
ed55fff92b
|
@ -15,6 +15,7 @@ import java.util.Set;
|
||||||
import javax.persistence.CascadeType;
|
import javax.persistence.CascadeType;
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EntityExistsException;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.GenerationType;
|
import javax.persistence.GenerationType;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
|
@ -41,6 +42,7 @@ import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests merge of detached PersistentBag
|
* Tests merge of detached PersistentBag
|
||||||
|
@ -70,6 +72,7 @@ public class DetachedBagDelayedOperationTest extends BaseCoreFunctionalTestCase
|
||||||
private Triggerable triggerableIgnoreQueuedOperationsOnMerge;
|
private Triggerable triggerableIgnoreQueuedOperationsOnMerge;
|
||||||
private Triggerable triggerableQueuedOperationWhenAttachToSession;
|
private Triggerable triggerableQueuedOperationWhenAttachToSession;
|
||||||
private Triggerable triggerableQueuedOperationWhenDetachFromSession;
|
private Triggerable triggerableQueuedOperationWhenDetachFromSession;
|
||||||
|
private Triggerable triggerableQueuedOperationOnRollback;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
|
@ -92,6 +95,7 @@ public class DetachedBagDelayedOperationTest extends BaseCoreFunctionalTestCase
|
||||||
triggerableIgnoreQueuedOperationsOnMerge = logInspectionCollectionType.watchForLogMessages( "HHH000494" );
|
triggerableIgnoreQueuedOperationsOnMerge = logInspectionCollectionType.watchForLogMessages( "HHH000494" );
|
||||||
triggerableQueuedOperationWhenAttachToSession = logInspectionAbstractPersistentCollection.watchForLogMessages( "HHH000495" );
|
triggerableQueuedOperationWhenAttachToSession = logInspectionAbstractPersistentCollection.watchForLogMessages( "HHH000495" );
|
||||||
triggerableQueuedOperationWhenDetachFromSession = logInspectionAbstractPersistentCollection.watchForLogMessages( "HHH000496" );
|
triggerableQueuedOperationWhenDetachFromSession = logInspectionAbstractPersistentCollection.watchForLogMessages( "HHH000496" );
|
||||||
|
triggerableQueuedOperationOnRollback = logInspectionAbstractPersistentCollection.watchForLogMessages( "HHH000498" );
|
||||||
|
|
||||||
resetTriggerables();
|
resetTriggerables();
|
||||||
}
|
}
|
||||||
|
@ -269,6 +273,51 @@ public class DetachedBagDelayedOperationTest extends BaseCoreFunctionalTestCase
|
||||||
checkTriggerablesNotTriggered();
|
checkTriggerablesNotTriggered();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-11209" )
|
||||||
|
public void testCollectionWithQueuedOperationsOnRollback() {
|
||||||
|
final Parent pOriginal = doInHibernate(
|
||||||
|
this::sessionFactory, session -> {
|
||||||
|
Parent p = session.get( Parent.class, 1L );
|
||||||
|
assertFalse( Hibernate.isInitialized( p.getChildren() ) );
|
||||||
|
// initialize
|
||||||
|
Hibernate.initialize( p.getChildren() );
|
||||||
|
assertTrue( Hibernate.isInitialized( p.getChildren() ) );
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
doInHibernate(
|
||||||
|
this::sessionFactory, session -> {
|
||||||
|
Parent p = (Parent) session.merge( pOriginal );
|
||||||
|
Child c = new Child( "Zeke" );
|
||||||
|
c.setParent( p );
|
||||||
|
session.persist( c );
|
||||||
|
assertFalse( Hibernate.isInitialized( p.getChildren() ) );
|
||||||
|
p.getChildren().add( c );
|
||||||
|
assertFalse( Hibernate.isInitialized( p.getChildren() ) );
|
||||||
|
assertTrue( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() );
|
||||||
|
|
||||||
|
checkTriggerablesNotTriggered();
|
||||||
|
|
||||||
|
// save a new Parent with the same ID to throw an exception.
|
||||||
|
|
||||||
|
Parent pDup = new Parent();
|
||||||
|
pDup.id = 1L;
|
||||||
|
session.persist( pDup );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
fail( "should have thrown EntityExistsException" );
|
||||||
|
}
|
||||||
|
catch (EntityExistsException expected) {
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTrue( triggerableQueuedOperationOnRollback.wasTriggered() );
|
||||||
|
triggerableQueuedOperationOnRollback.reset();
|
||||||
|
|
||||||
|
checkTriggerablesNotTriggered();
|
||||||
|
}
|
||||||
|
|
||||||
private void resetTriggerables() {
|
private void resetTriggerables() {
|
||||||
triggerableIgnoreQueuedOperationsOnMerge.reset();
|
triggerableIgnoreQueuedOperationsOnMerge.reset();
|
||||||
triggerableQueuedOperationWhenAttachToSession.reset();
|
triggerableQueuedOperationWhenAttachToSession.reset();
|
||||||
|
|
|
@ -60,6 +60,7 @@ log4j.logger.org.hibernate.engine.internal.Cascade=trace
|
||||||
|
|
||||||
log4j.logger.org.hibernate.testing.junit4.TestClassMetadata=info, unclosedSessionFactoryFile
|
log4j.logger.org.hibernate.testing.junit4.TestClassMetadata=info, unclosedSessionFactoryFile
|
||||||
log4j.logger.org.hibernate.boot.model.process.internal.ScanningCoordinator=debug
|
log4j.logger.org.hibernate.boot.model.process.internal.ScanningCoordinator=debug
|
||||||
|
log4j.logger.org.hibernate.collection.internal.AbstractPersistentCollection=debug
|
||||||
|
|
||||||
log4j.logger.org.hibernate.cache trace
|
log4j.logger.org.hibernate.cache trace
|
||||||
log4j.logger.org.hibernate.stat trace
|
log4j.logger.org.hibernate.stat trace
|
Loading…
Reference in New Issue