|
From: <gca...@us...> - 2011-12-02 14:44:27
|
Revision: 3726
http://openutils.svn.sourceforge.net/openutils/?rev=3726&view=rev
Author: gcatania
Date: 2011-12-02 14:44:21 +0000 (Fri, 02 Dec 2011)
Log Message:
-----------
BSHD-11 adding fix, unit tests
Modified Paths:
--------------
trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/ExampleTree.java
trunk/openutils-bshd5/src/test/java/it/openutils/hibernate/test/HibernateDAOTest.java
Modified: trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/ExampleTree.java
===================================================================
--- trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/ExampleTree.java 2011-12-02 14:40:25 UTC (rev 3725)
+++ trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/ExampleTree.java 2011-12-02 14:44:21 UTC (rev 3726)
@@ -47,6 +47,8 @@
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Example.PropertySelector;
import org.hibernate.criterion.MatchMode;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.engine.SessionImplementor;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.type.Type;
@@ -282,6 +284,9 @@
crit.add(c);
}
ClassMetadata classMetadata = sessionFactory.getClassMetadata(Hibernate.getClass(entity));
+
+ addIdentifierRestriction(crit, entity, classMetadata); // BSHD-11
+
Type[] types = classMetadata.getPropertyTypes();
String[] names = classMetadata.getPropertyNames();
for (int i = 0; i < types.length; i++)
@@ -315,6 +320,25 @@
}
}
+ /*
+ * BSHD-11
+ */
+ private void addIdentifierRestriction(Criteria crit, Object entity, ClassMetadata classMetadata)
+ {
+ String identifierName = classMetadata.getIdentifierPropertyName();
+ if (identifierName != null)
+ {
+ // TODO is this cast really necessary? Will it fail in future hibernate versions?
+ SessionImplementor si = (SessionImplementor) sessionFactory.getCurrentSession();
+
+ Object idValue = classMetadata.getIdentifier(entity, si);
+ if (idValue != null) // TODO should we use property selectors instead?
+ {
+ crit.add(Restrictions.idEq(idValue));
+ }
+ }
+ }
+
private String getAssociationPath(String[] walkedProperties)
{
return walkedProperties.length > 0 ? StringUtils.join(walkedProperties, '.') : StringUtils.EMPTY;
Modified: trunk/openutils-bshd5/src/test/java/it/openutils/hibernate/test/HibernateDAOTest.java
===================================================================
--- trunk/openutils-bshd5/src/test/java/it/openutils/hibernate/test/HibernateDAOTest.java 2011-12-02 14:40:25 UTC (rev 3725)
+++ trunk/openutils-bshd5/src/test/java/it/openutils/hibernate/test/HibernateDAOTest.java 2011-12-02 14:44:21 UTC (rev 3726)
@@ -313,6 +313,73 @@
Assert.assertEquals(shouldBeBob.getName(), bob.getName());
}
+ /**
+ * @see BSHD-11
+ */
+ @Test
+ public void testFindFilteredById()
+ {
+ Person alice = alice();
+ Long alicesId = personDAO.save(alice);
+ personDAO.save(bob());
+ Person filter = new Person();
+ filter.setId(alicesId);
+ List<Person> found = personDAO.findFiltered(filter);
+
+ Assert.assertEquals(found.size(), 1, "Invalid number of persons found.");
+ Assert.assertEquals(found.get(0), alice);
+ }
+
+ /**
+ * @see BSHD-11
+ */
+ @Test
+ public void testFindFilteredByNonDefaultId()
+ {
+ CarMaker toyota = toyota();
+ carMakerDAO.save(toyota);
+ carMakerDAO.save(fiat());
+
+ CarMaker filter = new CarMaker();
+ filter.setCode("TYT");
+ List<CarMaker> found = carMakerDAO.findFiltered(filter);
+
+ Assert.assertEquals(found.size(), 1, "Wrong number of car makers found");
+ CarMaker foundCarMaker = found.get(0);
+ Assert.assertEquals(foundCarMaker.getName(), "Toyota");
+ }
+
+ /**
+ * @see BSHD-11
+ */
+ @Test
+ public void testFindFilteredByChildId()
+ {
+ Owner bob = bob();
+ CarMaker toyota = toyota();
+ CarModel prius = prius(toyota);
+
+ Car bobsPrius = new Car();
+ bobsPrius.setModel(prius);
+ bobsPrius.setRegistrationDate(new GregorianCalendar(2010, Calendar.OCTOBER, 28));
+ bobsPrius.setMarketValue(new CurrencyAmount(1700, "USD"));
+ bobsPrius.setOwner(bob);
+ bob.setCars(Collections.singleton(bobsPrius));
+ personDAO.save(bob);
+ personDAO.save(alice());
+ personDAO.save(chuck());
+ personDAO.save(priusDesigner(prius));
+
+ Car carFilter = new Car();
+ carFilter.setId(bobsPrius.getId());
+ Owner filter = new Owner();
+ filter.setCars(Collections.singleton(carFilter));
+ List<Person> found = personDAO.findFiltered(filter);
+ Assert.assertEquals(found.size(), 1);
+ Person shouldBeBob = found.get(0);
+ Assert.assertEquals(shouldBeBob.getName(), bob.getName());
+ }
+
// @Test
// public void testExampleAssociations()
// {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|