diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/A.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/A.java deleted file mode 100644 index 45bfac2758..0000000000 --- a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/A.java +++ /dev/null @@ -1,51 +0,0 @@ -//$Id$ -package org.hibernate.jpa.test.cascade; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToOne; -import java.io.Serializable; - -/** - * @author Martin Simka - */ -@Entity -public class A implements Serializable { - private Integer id; - private B b; - - @Id - @GeneratedValue - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @OneToOne(targetEntity=B.class, mappedBy="a", orphanRemoval = true) - public B getB() { - return b; - } - - public void setB(B b) { - this.b = b; - } - - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof A) ) return false; - - final A a = (A) o; - - if ( !id.equals( a.id ) ) return false; - - return true; - } - - public int hashCode() { - return id.hashCode(); - } -} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/B.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/B.java deleted file mode 100644 index c5b1a55ded..0000000000 --- a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/B.java +++ /dev/null @@ -1,56 +0,0 @@ -//$Id$ -package org.hibernate.jpa.test.cascade; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; -import java.io.Serializable; - -/** - * @author Martin Simka - */ -@Entity -public class B implements Serializable { - private Integer id; - private A a; - - @Id - @GeneratedValue - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @OneToOne(targetEntity=A.class, cascade=CascadeType.ALL,optional = true, orphanRemoval = true) - @JoinColumn(name="FK_FOR_B") - public A getA() { - return a; - } - - public void setA(A a) { - this.a = a; - } - - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof B) ) return false; - - final B b = (B) o; - - if ( !id.equals( b.id ) ) return false; - - return true; - } - - public int hashCode() { - return id.hashCode(); - } -} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/CascadeTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/CascadeTest.java index 0315c46bb8..cac652d542 100644 --- a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/CascadeTest.java +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/cascade/CascadeTest.java @@ -26,15 +26,10 @@ package org.hibernate.jpa.test.cascade; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; -import org.hibernate.testing.FailureExpected; -import org.hibernate.testing.TestForIssue; import org.junit.Test; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - /** * @author Max Rydahl Andersen */ @@ -104,37 +99,13 @@ public class CascadeTest extends BaseEntityManagerFunctionalTestCase { em.close(); } - @Test - @TestForIssue(jiraKey = "HHH-9568") - @FailureExpected(jiraKey = "HHH-9568") - public void testFlushTransientOneToOne() throws Exception { - EntityManager em = getOrCreateEntityManager(); - em.getTransaction().begin(); - - B b = new B(); - A a = new A(); - - a.setB(b); - try { - em.persist(a); - em.flush(); - em.getTransaction().commit(); - fail("should have raised an IllegalStateException"); - } catch (IllegalStateException ex) { - // IllegalStateException caught as expected - } - em.close(); - } - @Override public Class[] getAnnotatedClasses() { return new Class[]{ Teacher.class, Student.class, Song.class, - Author.class, - A.class, - B.class + Author.class }; } diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/A.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/A.java new file mode 100644 index 0000000000..0b4747c2c9 --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/A.java @@ -0,0 +1,58 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2015, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.jpa.test.orphan.onetoone; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToOne; +import java.io.Serializable; + +/** + * @author Martin Simka + */ +@Entity +public class A implements Serializable { + private Integer id; + private B b; + + @Id + @GeneratedValue + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @OneToOne(targetEntity=B.class, mappedBy="a", orphanRemoval = true) + public B getB() { + return b; + } + + public void setB(B b) { + this.b = b; + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/B.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/B.java new file mode 100644 index 0000000000..52b2dde1b6 --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/B.java @@ -0,0 +1,61 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2015, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.jpa.test.orphan.onetoone; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import java.io.Serializable; + +/** + * @author Martin Simka + */ +@Entity +public class B implements Serializable { + private Integer id; + private A a; + + @Id + @GeneratedValue + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @OneToOne(targetEntity=A.class, cascade=CascadeType.ALL,optional = true, orphanRemoval = true) + @JoinColumn(name="FK_FOR_B") + public A getA() { + return a; + } + + public void setA(A a) { + this.a = a; + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/OneToOneOrphanTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/OneToOneOrphanTest.java new file mode 100644 index 0000000000..b9d29ee16d --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/orphan/onetoone/OneToOneOrphanTest.java @@ -0,0 +1,72 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2015, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.jpa.test.orphan.onetoone; + +import javax.persistence.EntityManager; + +import org.junit.Test; + +import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; +import org.hibernate.testing.FailureExpected; +import org.hibernate.testing.TestForIssue; + +import static org.junit.Assert.fail; + +/** + * @author Martin Simka + * @author Gail Badner + */ +public class OneToOneOrphanTest extends BaseEntityManagerFunctionalTestCase { + + @Override + public Class[] getAnnotatedClasses() { + return new Class[]{ + A.class, + B.class + }; + } + + @Test + @TestForIssue(jiraKey = "HHH-9568") + @FailureExpected(jiraKey = "HHH-9568") + public void testFlushTransientOneToOneNoCascade() throws Exception { + EntityManager em = getOrCreateEntityManager(); + em.getTransaction().begin(); + + B b = new B(); + A a = new A(); + + a.setB(b); + try { + em.persist(a); + em.flush(); + em.getTransaction().commit(); + fail("should have raised an IllegalStateException"); + } + catch (IllegalStateException ex) { + // IllegalStateException caught as expected + } + em.close(); + } +}