/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.event.collection.detached;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl;
import org.hibernate.cfg.Configuration;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Steve Ebersole
*/
@TestForIssue( jiraKey = "HHH-7928" )
public class BadMergeHandlingTest extends BaseCoreFunctionalTestCase {
@Override
protected void configure(Configuration configuration) {
super.configure( configuration );
configuration.setImplicitNamingStrategy( ImplicitNamingStrategyLegacyJpaImpl.INSTANCE );
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { Character.class, Alias.class };
}
@Test
@TestForIssue( jiraKey = "HHH-7928" )
public void testMergeAndHold() {
Session s = openSession();
s.beginTransaction();
Character paul = new Character( 1, "Paul Atreides" );
s.persist( paul );
Character paulo = new Character( 2, "Paulo Atreides" );
s.persist( paulo );
Alias alias1 = new Alias( 1, "Paul Muad'Dib" );
s.persist( alias1 );
Alias alias2 = new Alias( 2, "Usul" );
s.persist( alias2 );
Alias alias3 = new Alias( 3, "The Preacher" );
s.persist( alias3 );
s.getTransaction().commit();
s.close();
// set up relationships
s = openSession();
s.beginTransaction();
// customer 1
alias1.getCharacters().add( paul );
s.merge( alias1 );
alias2.getCharacters().add( paul );
s.merge( alias2 );
alias3.getCharacters().add( paul );
s.merge( alias3 );
s.flush();
// customer 2
alias1.getCharacters().add( paulo );
s.merge( alias1 );
alias2.getCharacters().add( paulo );
s.merge( alias2 );
alias3.getCharacters().add( paulo );
s.merge( alias3 );
s.flush();
s.getTransaction().commit();
s.close();
// now try to read them back (I guess)
s = openSession();
s.beginTransaction();
List results = s.createQuery( "select c from Character c join c.aliases a where a.alias = :aParam" )
.setParameter( "aParam", "Usul" )
.list();
assertEquals( 2, results.size() );
s.getTransaction().commit();
s.close();
}
}