HHH-9460 - Removing non-optional bidirectional @OneToOne association with cascade

This commit is contained in:
Vlad Mihalcea 2017-02-02 10:57:23 +02:00
parent 20500f17ae
commit f2f6a08853
1 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,106 @@
/*
* 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.onetoone.optional;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.FailureExpected;
import org.junit.Test;
import static javax.persistence.CascadeType.ALL;
import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
/**
* @author Vlad Mihalcea
*/
public class BidirectionalOptionalOneToOneTest
extends BaseEntityManagerFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Parent.class,
Child.class
};
}
@Test
@FailureExpected( jiraKey = "HHH-9460" )
public void test() {
doInJPA( this::entityManagerFactory, entityManager -> {
Parent a = new Parent();
a.id = 1L;
Child b = new Child();
b.id = 1L;
a.setChild(b);
b.setParent(a);
entityManager.persist(a);
} );
doInJPA( this::entityManagerFactory, entityManager -> {
Parent a = entityManager.find(Parent.class, 1L);
entityManager.remove(a);
} );
}
@javax.persistence.Entity
public static class Parent {
@Id
@Column(unique = true, nullable = false)
private Long id;
@OneToOne(optional = false, mappedBy = "parent", cascade = ALL)
private Child child;
public Long getId() {
return id;
}
public Child getChild() {
return child;
}
public void setChild(Child child) {
this.child = child;
}
}
@javax.persistence.Entity
public static class Child {
@Id
@Column(unique = true, nullable = false)
private Long id;
@OneToOne(optional = false)
@JoinColumn(nullable = false)
private Parent parent;
public Long getId() {
return id;
}
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
}