diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java index d5f2f2eb7c..8142eb9644 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/NotFoundTest.java @@ -9,12 +9,9 @@ package org.hibernate.test.annotations.notfound; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; import org.hibernate.annotations.NotFound; import org.hibernate.annotations.NotFoundAction; @@ -30,7 +27,7 @@ import static org.junit.Assert.assertNull; /** * @author Emmanuel Bernard */ -@RequiresDialectFeature( value = DialectChecks.SupportsIdentityColumns.class) +@RequiresDialectFeature(value = DialectChecks.SupportsIdentityColumns.class) public class NotFoundTest extends BaseCoreFunctionalTestCase { @Test @@ -59,25 +56,9 @@ public class NotFoundTest extends BaseCoreFunctionalTestCase { } ); } - @Test - public void testOneToOne() throws Exception { - doInHibernate( this::sessionFactory, session -> { - Show show = new Show(); - session.save( show ); - - ShowDescription showDescription = new ShowDescription(); - session.save( showDescription ); - } ); - } - @Override protected Class[] getAnnotatedClasses() { - return new Class[] { - Coin.class, - Currency.class, - Show.class, - ShowDescription.class - }; + return new Class[] {Coin.class, Currency.class}; } @Entity(name = "Coin") @@ -145,63 +126,4 @@ public class NotFoundTest extends BaseCoreFunctionalTestCase { } } - @Entity(name = "T_Show") - public static class Show { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - - @OneToOne() - @NotFound(action = NotFoundAction.IGNORE) - @JoinTable(name = "Show_Description", - joinColumns = @JoinColumn(name = "show_id"), - inverseJoinColumns = @JoinColumn(name = "description_id")) - private ShowDescription description; - - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public ShowDescription getDescription() { - return description; - } - - public void setDescription(ShowDescription description) { - this.description = description; - } - } - - @Entity(name = "ShowDescription") - public static class ShowDescription { - - @Id - @GeneratedValue - private Integer id; - - @NotFound(action = NotFoundAction.IGNORE) - @OneToOne(mappedBy = "description") - private Show show; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Show getShow() { - return show; - } - - public void setShow(Show show) { - this.show = show; - } - } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/OneToOneNotFoundTest.java b/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/OneToOneNotFoundTest.java new file mode 100644 index 0000000000..c7362215d3 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/annotations/notfound/OneToOneNotFoundTest.java @@ -0,0 +1,160 @@ +/* + * 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 . + */ +package org.hibernate.test.annotations.notfound; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ForeignKey; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.OneToOne; +import javax.persistence.Table; + +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; + +import org.hibernate.testing.TestForIssue; +import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +/** + * @author Andrea Boriero + */ +@TestForIssue(jiraKey = "HHH-11591") +public class OneToOneNotFoundTest extends BaseCoreFunctionalTestCase { + + @Override + protected boolean createSchema() { + return false; + } + + @Override + protected Class[] getAnnotatedClasses() { + return new Class[] {Show.class, ShowDescription.class}; + } + + @Before + public void setUp() { + doInHibernate( this::sessionFactory, session -> { + session.doWork( connection -> { + connection.createStatement().execute("create table SHOW_DESCRIPTION ( ID integer not null, primary key (ID) )" ); + connection.createStatement().execute("create table T_SHOW ( id integer not null, primary key (id) )" ); + connection.createStatement().execute("create table TSHOW_SHOWDESCRIPTION ( DESCRIPTION_ID integer, SHOW_ID integer not null, primary key (SHOW_ID) )" ); + + } ); + } ); + + doInHibernate( this::sessionFactory, session -> { + Show show = new Show(); + show.setId( 1 ); + ShowDescription showDescription = new ShowDescription(); + showDescription.setId( 2 ); + show.setDescription( showDescription ); + session.save( showDescription ); + session.save( show ); + + } ); + + doInHibernate( this::sessionFactory, session -> { + session.doWork( connection -> { + connection.createStatement().execute( "delete from SHOW_DESCRIPTION where ID = 2" ); + + } ); + } ); + } + + @After + public void tearDow() { + doInHibernate( this::sessionFactory, session -> { + session.doWork( connection -> { + connection.createStatement().execute( "drop table TSHOW_SHOWDESCRIPTION" ); + connection.createStatement().execute( "drop table SHOW_DESCRIPTION" ); + connection.createStatement().execute( "drop table T_SHOW" ); + + } ); + } ); + } + + @Test + public void testOneToOne() throws Exception { + doInHibernate( this::sessionFactory, session -> { + final Show show2 = session.find( Show.class, 1 ); + assertNotNull( show2 ); + assertNull( show2.getDescription() ); + } ); + } + + @Entity(name = "Show") + @Table(name = "T_SHOW") + public static class Show { + + @Id + private Integer id; + + @OneToOne + @NotFound(action = NotFoundAction.IGNORE) + @JoinTable(name = "TSHOW_SHOWDESCRIPTION", + joinColumns = @JoinColumn(name = "SHOW_ID"), + inverseJoinColumns = @JoinColumn(name = "DESCRIPTION_ID"), foreignKey = @ForeignKey(name = "FK_DESC")) + private ShowDescription description; + + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public ShowDescription getDescription() { + return description; + } + + public void setDescription(ShowDescription description) { + this.description = description; + description.setShow( this ); + } + } + + @Entity(name = "ShowDescription") + @Table(name = "SHOW_DESCRIPTION") + public static class ShowDescription { + + @Id + @Column(name = "ID") + private Integer id; + + @NotFound(action = NotFoundAction.IGNORE) + @OneToOne(mappedBy = "description", cascade = CascadeType.ALL) + private Show show; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Show getShow() { + return show; + } + + public void setShow(Show show) { + this.show = show; + } + } +}