[hibernate-commits] Hibernate SVN: r10298 - in trunk/HibernateExt/metadata/src: java/org/hibernate/annotations java/org/hibernate/cfg/annotations test/org/hibernate/test/annotations/inheritance/singletable

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Aug 18 19:31:25 EDT 2006


Author: epbernard
Date: 2006-08-18 19:31:23 -0400 (Fri, 18 Aug 2006)
New Revision: 10298

Added:
   trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/ForceDiscriminator.java
Modified:
   trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java
Log:
ANN-36 force discriminator feature Serg Prasolov

Added: trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/ForceDiscriminator.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/ForceDiscriminator.java	2006-08-18 22:46:02 UTC (rev 10297)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/annotations/ForceDiscriminator.java	2006-08-18 23:31:23 UTC (rev 10298)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * ForceDiscriminator flag
+ * To be placed at the root entity near @DiscriminatorColumn or @DiscriminatorFormula
+ *
+ * @author Serg Prasolov
+ */
+ at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
+public @interface ForceDiscriminator {}

Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java	2006-08-18 22:46:02 UTC (rev 10297)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java	2006-08-18 23:31:23 UTC (rev 10298)
@@ -28,6 +28,7 @@
 import org.hibernate.annotations.Proxy;
 import org.hibernate.annotations.Tables;
 import org.hibernate.annotations.Where;
+import org.hibernate.annotations.ForceDiscriminator;
 import org.hibernate.cache.CacheFactory;
 import org.hibernate.cfg.AnnotationBinder;
 import org.hibernate.cfg.Ejb3JoinColumn;
@@ -166,6 +167,7 @@
 				rootClass.setCacheRegionName( cacheRegion );
 				rootClass.setLazyPropertiesCacheable( cacheLazyProperty );
 			}
+			rootClass.setForceDiscriminator( annotatedClass.isAnnotationPresent( ForceDiscriminator.class ) );
 		}
 		else {
 			if (explicitHibernateEntityAnnotation) {

Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	2006-08-18 22:46:02 UTC (rev 10297)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	2006-08-18 23:31:23 UTC (rev 10298)
@@ -8,11 +8,14 @@
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 
+import org.hibernate.annotations.ForceDiscriminator;
+
 /**
  * @author Emmanuel Bernard
  */
 @Entity
 @DiscriminatorColumn(name = "discriminator_disc")
+ at ForceDiscriminator
 @DiscriminatorValue("B")
 public class Building {
 	@Id

Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java	2006-08-18 22:46:02 UTC (rev 10297)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java	2006-08-18 23:31:23 UTC (rev 10298)
@@ -2,9 +2,11 @@
 package org.hibernate.test.annotations.inheritance.singletable;
 
 import java.util.List;
+import java.sql.Statement;
 
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.WrongClassException;
 import org.hibernate.test.annotations.TestCase;
 import org.hibernate.test.annotations.inheritance.Apple;
 import org.hibernate.test.annotations.inheritance.Fruit;
@@ -27,6 +29,26 @@
 		s.close();
 	}
 
+	public void testForceDiscriminator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Building b = new Building();
+		s.persist( b );
+		s.flush();
+		Statement statement = s.connection().createStatement();
+		statement.executeUpdate( "update Building set discriminator_disc = 'N'");
+		statement.close();
+		s.clear();
+		try {
+			assertEquals( 0, s.createQuery( "select b from Building b" ).list().size() );
+		}
+		catch (WrongClassException e) {
+			fail("the wrong discriminator is not filtered");
+		}
+		tx.rollback();
+		s.close();
+	}
+
 	public void testDefault() throws Exception {
 		Session s;
 		Transaction tx;




More information about the hibernate-commits mailing list