[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