/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2011, 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.test.legacy;
import java.util.ArrayList;
import org.hibernate.PropertyValueException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.junit.Test;
import static org.junit.Assert.fail;
/**
* Test some cases of not-null properties inside components.
*
* @author Emmanuel Bernard
*/
public class ComponentNotNullTest extends LegacyTestCase {
@Override
public String[] getMappings() {
return new String[] {
"legacy/ComponentNotNullMaster.hbm.xml",
"legacy/One.hbm.xml",
"legacy/Many.hbm.xml",
"legacy/Simple.hbm.xml" };
}
@Override
public void configure(Configuration cfg) {
super.configure( cfg );
cfg.setProperty( Environment.CHECK_NULLABILITY, "true" );
}
@Test
public void testComponentNotNull() throws Exception {
//everything not null
//
Session s = openSession();
Transaction t = s.beginTransaction();
ComponentNotNullMaster master = new ComponentNotNullMaster();
ComponentNotNull nullable = new ComponentNotNull();
ComponentNotNull supercomp = new ComponentNotNull();
ComponentNotNull subcomp = new ComponentNotNull();
master.setNullable(nullable);
subcomp.setProp1Subcomp("test");
supercomp.setSubcomp(subcomp);
master.setSupercomp(supercomp);
s.save(master);
t.commit();
s.close();
//null prop of a subcomp
//
s = openSession();
t = s.beginTransaction();
master = new ComponentNotNullMaster();
nullable = new ComponentNotNull();
supercomp = new ComponentNotNull();
subcomp = new ComponentNotNull();
master.setNullable(nullable);
// do not set property
//subcomp.setProp1Subcomp("test");
supercomp.setSubcomp(subcomp);
master.setSupercomp(supercomp);
try {
s.save(master);
t.commit();
fail("Inserting not-null null property should fail");
} catch (PropertyValueException e) {
//succeed
}
t.rollback();
s.close();
//null component having not-null column
//
s = openSession();
t = s.beginTransaction();
master = new ComponentNotNullMaster();
nullable = new ComponentNotNull();
supercomp = new ComponentNotNull();
subcomp = new ComponentNotNull();
master.setNullable(nullable);
// do not set supercomp for master
//subcomp.setProp1Subcomp("test");
//supercomp.setSubcomp(subcomp);
//master.setSupercomp(supercomp);
try {
s.save(master);
t.commit();
fail("Inserting not-null null property should fail");
} catch (PropertyValueException e) {
//succeed
}
t.rollback();
s.close();
}
@Test
public void testCompositeElement() throws Exception {
//composite-element nullable
Session s = openSession();
Transaction t = s.beginTransaction();
ComponentNotNullMaster master = new ComponentNotNullMaster();
ComponentNotNull nullable = new ComponentNotNull();
ComponentNotNull supercomp = new ComponentNotNull();
ComponentNotNull subcomp = new ComponentNotNull();
master.setNullable(nullable);
subcomp.setProp1Subcomp("test");
supercomp.setSubcomp(subcomp);
master.setSupercomp(supercomp);
master.setComponents(new ArrayList());
ComponentNotNullMaster.ContainerInnerClass cc =
new ComponentNotNullMaster.ContainerInnerClass();
master.getComponents().add(cc);
try {
s.save(master);
t.commit();
fail("Inserting not-null many-to-one should fail");
} catch (PropertyValueException e) {
//success
}
t.rollback();
s.close();
//null nested component having not-null column
//
s = openSession();
t = s.beginTransaction();
master = new ComponentNotNullMaster();
nullable = new ComponentNotNull();
supercomp = new ComponentNotNull();
subcomp = new ComponentNotNull();
master.setNullable(nullable);
subcomp.setProp1Subcomp("test");
supercomp.setSubcomp(subcomp);
master.setSupercomp(supercomp);
master.setComponentsImplicit(new ArrayList());
ComponentNotNullMaster.ContainerInnerClass nestedCc =
new ComponentNotNullMaster.ContainerInnerClass();
cc =
new ComponentNotNullMaster.ContainerInnerClass();
cc.setNested(nestedCc);
master.getComponentsImplicit().add(cc);
try {
s.save(master);
t.commit();
fail("Inserting not-null null property should fail");
} catch (PropertyValueException e) {
//succeed
}
t.rollback();
s.close();
//nested component having not-null column
//
s = openSession();
t = s.beginTransaction();
master = new ComponentNotNullMaster();
nullable = new ComponentNotNull();
supercomp = new ComponentNotNull();
subcomp = new ComponentNotNull();
master.setNullable(nullable);
subcomp.setProp1Subcomp("test");
supercomp.setSubcomp(subcomp);
master.setSupercomp(supercomp);
master.setComponentsImplicit(new ArrayList());
nestedCc =
new ComponentNotNullMaster.ContainerInnerClass();
cc =
new ComponentNotNullMaster.ContainerInnerClass();
cc.setNested(nestedCc);
nestedCc.setNestedproperty("test");
master.getComponentsImplicit().add(cc);
s.save(master);
t.commit();
s.close();
}
}