r2808 - in trunk/topia-persistence/src: main/java/org/nuiton/topia main/java/org/nuiton/topia/persistence test/java/org/nuiton/topia/persistence
Author: bleny Date: 2013-10-02 11:02:12 +0200 (Wed, 02 Oct 2013) New Revision: 2808 Url: http://nuiton.org/projects/topia/repository/revisions/2808 Log: refs #2087 add some methods inhql builder Added: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/HqlAndParametersBuilderTest.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/HibernateTopiaJpaSupport.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDAO.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/HibernateTopiaJpaSupport.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/HibernateTopiaJpaSupport.java 2013-10-01 13:15:11 UTC (rev 2807) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/HibernateTopiaJpaSupport.java 2013-10-02 09:02:12 UTC (rev 2808) @@ -24,6 +24,8 @@ * #L% */ +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Query; @@ -43,6 +45,8 @@ */ public class HibernateTopiaJpaSupport implements TopiaJpaSupport { + private static final Log log = LogFactory.getLog(HibernateTopiaJpaSupport.class); + // TODO AThimel 27/09/13 Javadoc protected TopiaHibernateSupport hibernateSupport; @@ -115,6 +119,11 @@ } catch (HibernateException eee) { throw new TopiaException(String.format("An error occurs during query operation: %1$s : %2$s", jpaql, eee.getMessage()), eee); + } catch (RuntimeException e) { + if (log.isWarnEnabled()) { + log.warn("exception occurred for query \n" + jpaql + "\nwith parameters " + parameters); + } + throw e; } } @@ -135,6 +144,11 @@ } catch (HibernateException eee) { throw new TopiaException(String.format("An error occurs during query operation: %1$s : %2$s", jpaql, eee.getMessage()), eee); + } catch (RuntimeException e) { + if (log.isWarnEnabled()) { + log.warn("exception occurred for query \n" + jpaql + "\nwith parameters " + parameters); + } + throw e; } } @@ -154,6 +168,11 @@ } catch (HibernateException eee) { throw new TopiaException(String.format("An error occurs during execute operation: %1$s : %2$s", jpaql, eee.getMessage()), eee); + } catch (RuntimeException e) { + if (log.isWarnEnabled()) { + log.warn("exception occurred for query \n" + jpaql + "\nwith parameters " + parameters); + } + throw e; } } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDAO.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDAO.java 2013-10-01 13:15:11 UTC (rev 2807) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDAO.java 2013-10-02 09:02:12 UTC (rev 2808) @@ -516,6 +516,14 @@ return this; } + public void addTopiaIdEquals(String property, String topiaId) { + hqlAndParametersBuilder.addTopiaIdEquals(property, topiaId); + } + + public void addTopiaIdIn(String property, Iterable<String> topiaIds) { + hqlAndParametersBuilder.addTopiaIdIn(property, topiaIds); + } + // shortcuts to next step public boolean exists() { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java 2013-10-01 13:15:11 UTC (rev 2807) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java 2013-10-02 09:02:12 UTC (rev 2808) @@ -61,16 +61,17 @@ } public void addEquals(String property, Object value) { + // TODO brendan 02/10/13 do not use HQL parameters of Object are primitive types if (value == null) { addNull(property); } else { - String hqlParameterName = findAvailableHqlParameterName(property); + String hqlParameterName = putHqlParameterWithAvailableName(property, value); whereClauses.add(property + " = :" + hqlParameterName); - parameters.put(hqlParameterName, value); } } public void addIn(String property, Iterable<Object> values) { + // TODO brendan 02/10/13 do not use HQL parameters of Object are primitive types Preconditions.checkArgument(!Iterables.isEmpty(values)); if (Iterables.size(values) == 1) { addEquals(property, Iterables.getOnlyElement(values)); @@ -81,8 +82,8 @@ if (value == null) { propertyMayBeNull = true; } else { - String hqlParameterName = findAvailableHqlParameterName(property); - parameters.put(hqlParameterName, value); + String hqlParameterName = putHqlParameterWithAvailableName(property, value); + hqlParameterNames.add(hqlParameterName); } } String inClause = property + " in (" + StringUtils.join(hqlParameterNames, ", ")+ ")"; @@ -94,10 +95,17 @@ } } + public void addTopiaIdEquals(String property, String topiaId) { + addEquals(property + "." + TopiaEntity.PROPERTY_TOPIA_ID, topiaId); + } + + public void addTopiaIdIn(String property, Iterable<String> topiaIds) { + addIn(property + "." + TopiaEntity.PROPERTY_TOPIA_ID, (Iterable) topiaIds); + } + public void addContains(String property, Object value) { - String hqlParameterName = findAvailableHqlParameterName(property); + String hqlParameterName = putHqlParameterWithAvailableName(property, value); whereClauses.add(":" + hqlParameterName + " in elements(" + property + ")"); - parameters.put(hqlParameterName, value); } public String getHql() { @@ -113,13 +121,22 @@ return hql; } - protected String findAvailableHqlParameterName(String propertyName) { - String parameterName = propertyName; + /** + * Add a parameter in the parameters map searching with the suitable parameter name + * in order to prevent conflicts. + * + * @return the found key where the parameter has been added, suitable to use in the where clause + */ + protected String putHqlParameterWithAvailableName(String propertyName, Object value) { + // TODO brendan 01/10/13 replace survey.topiaId by surveyTopiaId + String parameterNamePrefix = propertyName.replaceAll("\\.", ""); int suffix = 0; + String parameterName = parameterNamePrefix; while (parameters.containsKey(parameterName)) { suffix += 1; - parameterName = propertyName + suffix; + parameterName = parameterNamePrefix + suffix; } + parameters.put(parameterName, value); return parameterName; } Added: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/HqlAndParametersBuilderTest.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/HqlAndParametersBuilderTest.java (rev 0) +++ trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/HqlAndParametersBuilderTest.java 2013-10-02 09:02:12 UTC (rev 2808) @@ -0,0 +1,23 @@ +package org.nuiton.topia.persistence; + +import org.junit.Assert; +import org.junit.Test; + +public class HqlAndParametersBuilderTest { + + @Test + public void testFindAvailableHqlParameterName() { + + HqlAndParametersBuilder hqlAndParametersBuilderTest = + new HqlAndParametersBuilder(TopiaEntity.class); + + String availableHqlParameterName1 = hqlAndParametersBuilderTest.putHqlParameterWithAvailableName("survey.topiaId", "topiaId1"); + String availableHqlParameterName2 = hqlAndParametersBuilderTest.putHqlParameterWithAvailableName("survey.topiaId", "topiaId1"); + + Assert.assertNotEquals(availableHqlParameterName1, availableHqlParameterName2); + Assert.assertFalse(availableHqlParameterName1.contains(".")); + Assert.assertFalse(availableHqlParameterName2.contains(".")); + + } + +}
participants (1)
-
bleny@users.nuiton.org