/* * 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.annotations.onetoone.hhh9798; import javax.persistence.PersistenceException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.id.IdentifierGenerationException; import org.junit.Test; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.junit.Assert.fail; @TestForIssue(jiraKey = "HHH-9798") public class OneToOneJoinTableTest extends BaseCoreFunctionalTestCase { @Test public void storeNonUniqueRelationship() throws Throwable { Session session = null; try { session = openSession(); Transaction tx = session.beginTransaction(); Item someItem = new Item( "Some Item" ); session.save( someItem ); Shipment shipment1 = new Shipment( someItem ); session.save( shipment1 ); Shipment shipment2 = new Shipment( someItem ); session.save( shipment2 ); tx.commit(); fail(); }catch (PersistenceException e){ assertTyping( ConstraintViolationException.class, e.getCause()); // expected } finally { if ( session != null ) { session.getTransaction().rollback(); session.close(); } cleanUpData(); } } private void cleanUpData() { Session session = openSession(); session.beginTransaction(); session.createQuery( "delete Shipment" ).executeUpdate(); session.createQuery( "delete Item" ).executeUpdate(); session.getTransaction().commit(); session.close(); } @Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[] { Shipment.class, Item.class }; } }