/*
* 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.bytecode.enhancement.cascade;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.test.bytecode.enhancement.AbstractEnhancerTestTask;
import org.junit.Assert;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/**
* @author Luis Barreiro
*/
public class CascadeWithFkConstraintTestTask extends AbstractEnhancerTestTask {
private String garageId, car1Id, car2Id;
public Class<?>[] getAnnotatedClasses() {
return new Class<?>[]{Garage.class, Car.class};
}
public void prepare() {
Configuration cfg = new Configuration();
cfg.setProperty( Environment.ENABLE_LAZY_LOAD_NO_TRANS, "true" );
cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "false" );
super.prepare( cfg );
// Create garage, add 2 cars to garage
EntityManager em = getFactory().createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Garage garage = new Garage();
Car car1 = new Car();
Car car2 = new Car();
garage.insert( car1 );
garage.insert( car2 );
em.persist( garage );
em.persist( car1 );
em.persist( car2 );
tx.commit();
em.close();
garageId = garage.id;
car1Id = car1.id;
car2Id = car2.id;
}
public void execute() {
// Remove garage
EntityManager em = getFactory().createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Garage toRemoveGarage = em.find( Garage.class, garageId );
em.remove( toRemoveGarage );
tx.commit();
em.close();
// Check if there is no garage but cars are still present
EntityManager testEm = getFactory().createEntityManager();
tx = testEm.getTransaction();
tx.begin();
Garage foundGarage = testEm.find( Garage.class, garageId );
Assert.assertNull( foundGarage );
Car foundCar1 = testEm.find( Car.class, car1Id );
Assert.assertEquals( car1Id, foundCar1.id );
Car foundCar2 = testEm.find( Car.class, car2Id );
Assert.assertEquals( car2Id, foundCar2.id );
tx.commit();
testEm.close();
}
protected void cleanup() {
}
// --- //
@Entity(name="Garage")
public static class Garage {
@Id
String id;
@OneToMany
@JoinColumn( name = "GARAGE_ID" )
Set<Car> cars = new HashSet<>();
public Garage() {
this.id = UUID.randomUUID().toString();
}
public boolean insert(Car aCar) {
return cars.add( aCar );
}
}
@Entity(name="Car")
public static class Car {
@Id
String id;
public Car() {
id = UUID.randomUUID().toString();
}
}
}