package com.txtr.hibernatedelta.validator;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.junit.Test;
@SuppressWarnings({"NullableProblems", "ConstantConditions"})
public class HibernateFieldFactoryTest {
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private static class HibernateFieldFactoryTestHost {
@OneToMany(mappedBy = "basket", cascade = {CascadeType.REMOVE}, fetch = FetchType.LAZY)
@Fetch(FetchMode.SELECT)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Set<HibernateFieldFactoryTestGuest> guest;
}
private static class NotAnEntity {
@OneToMany(mappedBy = "basket", cascade = {CascadeType.REMOVE}, fetch = FetchType.LAZY)
@Fetch(FetchMode.SELECT)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Set<HibernateFieldFactoryTestGuest> guest;
}
@SuppressWarnings("ClassMayBeInterface")
private static class HibernateFieldFactoryTestGuest {
}
@Test(expected = IllegalStateException.class)
public void testCreateHibernateField() throws Exception {
// Expect.exception(IllegalStateException.class, "association must be cached exactly when the target is cached: " +
// "com.bookpac.tools.build.hibernate.HibernateFieldFactoryTest$HibernateFieldFactoryTestHost.guest", new TestRunnable() {
// @Override
// public void run() throws Exception {
HibernateFieldFactory.createHibernateField(HibernateFieldFactoryTestHost.class.getDeclaredField("guest"), null, null, null);
// }
// });
}
@Test(expected = IllegalStateException.class)
public void testEntityNotCached() throws Exception {
// Expect.exception(IllegalStateException.class, "collection is cached but entity is not: " +
// "com.bookpac.tools.build.hibernate.HibernateFieldFactoryTest$NotAnEntity.guest", new TestRunnable() {
// @Override
// public void run() throws Exception {
HibernateFieldFactory.createHibernateField(NotAnEntity.class.getDeclaredField("guest"), null, null, null);
// }
// });
}
}