/*
* 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: */
package org.hibernate.test;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.event.service.spi.EventListenerRegistry;
import org.hibernate.event.spi.EventType;
import org.hibernate.event.spi.PreInsertEvent;
import org.hibernate.event.spi.PreInsertEventListener;
import org.junit.Test;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
/**
* @author Chris Cranford
*/
public class TestHhh11721 extends BaseCoreFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { A.class, B.class };
}
@Override
protected void afterSessionFactoryBuilt() {
super.afterSessionFactoryBuilt();
EventListenerRegistry registry = sessionFactory().getServiceRegistry().getService( EventListenerRegistry.class );
registry.appendListeners(
EventType.PRE_INSERT,
new PreInsertEventListener() {
@Override
public boolean onPreInsert(PreInsertEvent event) {
return true;
}
}
);
}
@Test
public void testInsertVeto() throws Exception {
doInHibernate( this::sessionFactory, session -> {
A a = new A();
B b = new B();
b.setField1( "f1" );
b.setfield2( "f2" );
a.setB( b );
session.save( a );
} );
}
@Entity(name = "A")
public static class A{
@Id
@GeneratedValue
private Integer id;
@OneToOne(cascade = CascadeType.ALL)
private B b;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
}
@Entity(name = "B")
public static class B {
@Id
@GeneratedValue
private Integer id;
private String field1;
private String field2;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setfield2(String field2) {
this.field2 = field2;
}
}
}