[hibernate-commits] Hibernate SVN: r14751 - in annotations/trunk/src/test: org/hibernate/test/annotations/naturalid and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jun 9 08:40:46 EDT 2008


Author: hardy.ferentschik
Date: 2008-06-09 08:40:46 -0400 (Mon, 09 Jun 2008)
New Revision: 14751

Added:
   annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
   annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
Modified:
   annotations/trunk/src/test/log4j.properties
   annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdTest.java
Log:
* Added test case for ANN-750
* Improved the tests for NaturalId
* Added chainsaw logger to log4j for test configuration

Modified: annotations/trunk/src/test/log4j.properties
===================================================================
--- annotations/trunk/src/test/log4j.properties	2008-06-06 15:51:05 UTC (rev 14750)
+++ annotations/trunk/src/test/log4j.properties	2008-06-09 12:40:46 UTC (rev 14751)
@@ -5,11 +5,18 @@
 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 
 ### direct messages to file hibernate.log ###
-#log4j.appender.file=org.apache.log4j.FileAppender
-#log4j.appender.file.File=hibernate.log
-#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.File=hibernate.log
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 
+### direct messages to socket - chainsaw ###
+log4j.appender.socket=org.apache.log4j.net.SocketAppender
+log4j.appender.socket.remoteHost=localhost
+log4j.appender.socket.port=4560
+log4j.appender.socket.locationInfo=true
+
+
 ### set log levels - for more verbose logging change 'info' to 'debug' ###
 
 log4j.rootLogger=warn, stdout

Added: annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
===================================================================
--- annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java	                        (rev 0)
+++ annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java	2008-06-09 12:40:46 UTC (rev 14751)
@@ -0,0 +1,42 @@
+package org.hibernate.test.annotations.naturalid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.NaturalId;
+
+ at Entity
+/**
+ * Test case for NaturalId annotation - ANN-750
+ * 
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+class NaturalIdOnManyToOne {
+
+    @Id
+    @GeneratedValue
+    int id;
+
+    @NaturalId
+    @ManyToOne
+    Citizen citizen;
+    
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public Citizen getCitizen() {
+		return citizen;
+	}
+
+	public void setCitizen(Citizen citizen) {
+		this.citizen = citizen;
+	}
+} 


Property changes on: annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnManyToOne.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
===================================================================
--- annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java	                        (rev 0)
+++ annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java	2008-06-09 12:40:46 UTC (rev 14751)
@@ -0,0 +1,95 @@
+//$Id: NaturalIdTest.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
+package org.hibernate.test.annotations.naturalid;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.annotations.TestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test case for NaturalId annotation. See ANN-750.
+ * 
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+ at SuppressWarnings("unchecked")
+public class NaturalIdOnSingleManyToOneTest extends TestCase {
+	
+	private Logger log = LoggerFactory.getLogger(NaturalIdOnManyToOne.class);
+
+	public void testMappingProperties() {
+		log.warn("Commented out test");
+//TODO Fix test
+//		ClassMetadata metaData = getSessions().getClassMetadata(
+//				NaturalIdOnManyToOne.class);
+//		assertTrue("Class should have a natural key", metaData
+//				.hasNaturalIdentifier());
+//		int[] propertiesIndex = metaData.getNaturalIdentifierProperties();
+//		assertTrue("Wrong number of elements", propertiesIndex.length == 1);
+	}
+
+	public void testManyToOneNaturalIdCached() {
+		NaturalIdOnManyToOne singleManyToOne = new NaturalIdOnManyToOne();
+		Citizen c1 = new Citizen();
+		c1.setFirstname("Emmanuel");
+		c1.setLastname("Bernard");
+		c1.setSsn("1234");
+
+		State france = new State();
+		france.setName("Ile de France");
+		c1.setState(france);
+
+		singleManyToOne.setCitizen(c1);
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist(france);
+		s.persist(c1);
+		s.persist(singleManyToOne);
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Criteria criteria = s.createCriteria(NaturalIdOnManyToOne.class);
+		criteria.add(Restrictions.naturalId().set("citizen", c1));
+		criteria.setCacheable(true);
+
+		Statistics stats = getSessions().getStatistics();
+		stats.setStatisticsEnabled(true);
+		stats.clear();
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+
+		// first query
+		List results = criteria.list();
+		assertEquals(1, results.size());
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+		assertEquals("First query should be a miss", 1, stats
+				.getQueryCacheMissCount());
+		assertEquals("Query result should be added to cache", 1, stats
+				.getQueryCachePutCount());
+
+		// query a second time - result should be cached
+		results = criteria.list();
+		assertEquals("Cache hits should be empty", 1, stats
+				.getQueryCacheHitCount());
+
+		// cleanup
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] { Citizen.class, State.class,
+				NaturalIdOnManyToOne.class };
+	}
+}


Property changes on: annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdOnSingleManyToOneTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdTest.java
===================================================================
--- annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdTest.java	2008-06-06 15:51:05 UTC (rev 14750)
+++ annotations/trunk/src/test/org/hibernate/test/annotations/naturalid/NaturalIdTest.java	2008-06-09 12:40:46 UTC (rev 14751)
@@ -3,43 +3,135 @@
 
 import java.util.List;
 
+import org.hibernate.Criteria;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
 import org.hibernate.criterion.Restrictions;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.stat.Statistics;
 import org.hibernate.test.annotations.TestCase;
 
 /**
+ * Test case for NaturalId annotation
+ * 
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
+ at SuppressWarnings("unchecked")
 public class NaturalIdTest extends TestCase {
 
-	public void testNaturalId() {
-		Citizen c = new Citizen();
-		c.setFirstname( "Emmanuel" );
-		c.setLastname( "Bernard" );
-		c.setSsn( "1234" );
-		State ste = new State();
-		ste.setName( "Ile de France");
-		c.setState( ste);
+	public void testMappingProperties() {
+		ClassMetadata metaData = getSessions().getClassMetadata(
+				Citizen.class);
+		assertTrue("Class should have a natural key", metaData
+				.hasNaturalIdentifier());
+		int[] propertiesIndex = metaData.getNaturalIdentifierProperties();
+		assertTrue("Wrong number of elements", propertiesIndex.length == 1);
+	}
+
+	public void testNaturalIdCached() {
+		saveSomeCitizens();
+
 		Session s = openSession();
 		Transaction tx = s.beginTransaction();
-		s.persist( ste );
-		s.persist( c );
-		s.flush();
-		s.clear();
-		List results = s.createCriteria( Citizen.class )
-				.add( Restrictions.naturalId().set( "ssn", "1234" ).set( "state", ste ) )
-				.list();
-		assertEquals( 1, results.size() );
+		State france = (State) s.load(State.class, new Integer(2));
+		Criteria criteria = s.createCriteria(Citizen.class);
+		criteria.add(Restrictions.naturalId().set("ssn", "1234").set("state",
+				france));
+		criteria.setCacheable(true);
 
+		Statistics stats = getSessions().getStatistics();
+		stats.setStatisticsEnabled(true);
+		stats.clear();
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+
+		// first query
+		List results = criteria.list();
+		assertEquals(1, results.size());
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+		assertEquals("First query should be a miss", 1, stats
+				.getQueryCacheMissCount());
+		assertEquals("Query result should be added to cache", 1, stats
+				.getQueryCachePutCount());
+
+		// query a second time - result should be cached
+		results = criteria.list();
+		assertEquals("Cache hits should be empty", 1, stats
+				.getQueryCacheHitCount());
+
+		// cleanup
 		tx.rollback();
 		s.close();
 	}
 
+	public void testNaturalIdUncached() {
+
+		saveSomeCitizens();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		State france = (State) s.load(State.class, new Integer(2));
+		Criteria criteria = s.createCriteria(Citizen.class);
+		criteria.add(Restrictions.naturalId().set("ssn", "1234").set("state",
+				france));
+		criteria.setCacheable(false);
+
+		Statistics stats = getSessions().getStatistics();
+		stats.setStatisticsEnabled(true);
+		stats.clear();
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+
+		// first query
+		List results = criteria.list();
+		assertEquals(1, results.size());
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+		assertEquals("Query result should be added to cache", 0, stats
+				.getQueryCachePutCount());
+
+		// query a second time
+		results = criteria.list();
+		assertEquals("Cache hits should be empty", 0, stats
+				.getQueryCacheHitCount());
+
+		// cleanup
+		tx.rollback();
+		s.close();
+	}
+
 	protected Class[] getMappings() {
-		return new Class[] {
-        		Citizen.class,
-				State.class
-		};
+		return new Class[] { Citizen.class, State.class,
+				NaturalIdOnManyToOne.class };
 	}
+
+	private void saveSomeCitizens() {
+		Citizen c1 = new Citizen();
+		c1.setFirstname("Emmanuel");
+		c1.setLastname("Bernard");
+		c1.setSsn("1234");
+
+		State france = new State();
+		france.setName("Ile de France");
+		c1.setState(france);
+
+		Citizen c2 = new Citizen();
+		c2.setFirstname("Gavin");
+		c2.setLastname("King");
+		c2.setSsn("000");
+		State australia = new State();
+		australia.setName("Australia");
+		c2.setState(australia);
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist(australia);
+		s.persist(france);
+		s.persist(c1);
+		s.persist(c2);
+		tx.commit();
+		s.close();
+	}
 }




More information about the hibernate-commits mailing list