You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by da...@apache.org on 2015/06/08 22:27:45 UTC
deltaspike git commit: DELTASPIKE-894 Trim for CriteriaSupport API
Repository: deltaspike
Updated Branches:
refs/heads/master e0f976181 -> 8ed97fb72
DELTASPIKE-894 Trim for CriteriaSupport API
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/8ed97fb7
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/8ed97fb7
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/8ed97fb7
Branch: refs/heads/master
Commit: 8ed97fb72962cd5eabf50526ef80447cae2db3cd
Parents: e0f9761
Author: Daniel Cunha (soro) <da...@apache.org>
Authored: Mon Jun 8 17:26:12 2015 -0300
Committer: Daniel Cunha (soro) <da...@apache.org>
Committed: Mon Jun 8 17:26:16 2015 -0300
----------------------------------------------------------------------
.../data/api/criteria/CriteriaSupport.java | 101 +++++++++++++------
.../impl/criteria/selection/strings/Trim.java | 52 ++++++++++
.../impl/handler/CriteriaSupportHandler.java | 15 +++
.../data/impl/criteria/CriteriaTest.java | 16 +++
.../test/service/SimpleCriteriaRepository.java | 55 ++++++----
5 files changed, 190 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8ed97fb7/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/criteria/CriteriaSupport.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/criteria/CriteriaSupport.java b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/criteria/CriteriaSupport.java
index fa8ea2c..5d8288f 100644
--- a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/criteria/CriteriaSupport.java
+++ b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/criteria/CriteriaSupport.java
@@ -18,48 +18,52 @@
*/
package org.apache.deltaspike.data.api.criteria;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.JoinType;
+import javax.persistence.metamodel.SingularAttribute;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.metamodel.SingularAttribute;
-
/**
* Interface to be added to a repository for criteria support.
*
- * @param <E> Entity type.
+ * @param <E> Entity type.
*/
public interface CriteriaSupport<E>
{
/**
* Create a {@link Criteria} instance.
- * @return Criteria instance related to the Repository entity class.
+ *
+ * @return Criteria instance related to the Repository entity class.
*/
Criteria<E, E> criteria();
/**
* Create a {@link Criteria} instance.
- * @param <T> Type related to the current criteria class.
- * @param clazz Class other than the current entity class.
- * @return Criteria instance related to a join type of the current entity class.
+ *
+ * @param <T> Type related to the current criteria class.
+ * @param clazz Class other than the current entity class.
+ * @return Criteria instance related to a join type of the current entity class.
*/
<T> Criteria<T, T> where(Class<T> clazz);
/**
* Create a {@link Criteria} instance with a join type.
- * @param <T> Type related to the current criteria class.
- * @param clazz Class other than the current entity class.
- * @param joinType Join type to apply.
- * @return Criteria instance related to a join type of the current entity class.
+ *
+ * @param <T> Type related to the current criteria class.
+ * @param clazz Class other than the current entity class.
+ * @param joinType Join type to apply.
+ * @return Criteria instance related to a join type of the current entity class.
*/
<T> Criteria<T, T> where(Class<T> clazz, JoinType joinType);
/**
* Create a query selection for an Entity attribute.
+ *
* @param attribute Attribute to show up in the result selection
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<X> QuerySelection<E, X> attribute(SingularAttribute<? super E, X> attribute);
@@ -67,8 +71,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#abs(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> abs(SingularAttribute<? super E, N> attribute);
@@ -76,8 +81,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#avg(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> avg(SingularAttribute<? super E, N> attribute);
@@ -85,8 +91,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#count(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Long> count(SingularAttribute<? super E, ?> attribute);
@@ -94,8 +101,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#countDistinct(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Long> countDistinct(SingularAttribute<? super E, ?> attribute);
@@ -103,8 +111,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#max(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> max(SingularAttribute<? super E, N> attribute);
@@ -112,8 +121,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#min(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> min(SingularAttribute<? super E, N> attribute);
@@ -121,8 +131,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#neg(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> neg(SingularAttribute<? super E, N> attribute);
@@ -130,8 +141,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#sum(javax.persistence.criteria.Expression)}
* over an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
<N extends Number> QuerySelection<E, N> sum(SingularAttribute<? super E, N> attribute);
@@ -139,9 +151,10 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#mod(javax.persistence.criteria.Expression, Integer)}
* for an attribute.
+ *
* @param attribute Attribute to use in the aggregate.
* @param modulo Modulo what.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Integer> modulo(SingularAttribute<? super E, Integer> attribute, Integer modulo);
@@ -149,8 +162,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#upper(javax.persistence.criteria.Expression)}
* over a String attribute.
+ *
* @param attribute Attribute to uppercase.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, String> upper(SingularAttribute<? super E, String> attribute);
@@ -158,8 +172,9 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#lower(javax.persistence.criteria.Expression)}
* over a String attribute.
+ *
* @param attribute Attribute to lowercase.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, String> lower(SingularAttribute<? super E, String> attribute);
@@ -167,9 +182,10 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#substring(javax.persistence.criteria.Expression, int)}
* over a String attribute.
+ *
* @param attribute Attribute to create a substring from.
* @param from Substring start.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, String> substring(SingularAttribute<? super E, String> attribute, int from);
@@ -177,28 +193,55 @@ public interface CriteriaSupport<E>
* Create a query selection for the
* {@link javax.persistence.criteria.CriteriaBuilder#substring(javax.persistence.criteria.Expression, int, int)}
* over a String attribute.
+ *
* @param attribute Attribute to create a substring from.
* @param from Substring start.
* @param length Substring length.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, String> substring(SingularAttribute<? super E, String> attribute, int from, int length);
/**
+ * Create a query selection for the
+ * {@link javax.persistence.criteria.CriteriaBuilder#trim(javax.persistence.criteria.Expression)}
+ * over a String attribute.
+ *
+ * @param attribute Attribute to apply trim.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ */
+ QuerySelection<E, String> trim(SingularAttribute<? super E, String> attribute);
+
+ /**
+ * Create a query selection for the
+ * {@link javax.persistence.criteria.CriteriaBuilder#trim(javax.persistence.criteria.CriteriaBuilder.Trimspec,
+ * javax.persistence.criteria.Expression)}
+ * over a String attribute.
+ *
+ * @param trimspec Used to specify how strings are trimmed.
+ * @param attribute Attribute to apply trim.
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ */
+ QuerySelection<E, String> trim(CriteriaBuilder.Trimspec trimspec, SingularAttribute<? super E, String> attribute);
+
+
+ /**
* Create a query selection for the {@link javax.persistence.criteria.CriteriaBuilder#currentDate()}.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ *
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Date> currDate();
/**
* Create a query selection for the {@link javax.persistence.criteria.CriteriaBuilder#currentTime()}.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ *
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Time> currTime();
/**
* Create a query selection for the {@link javax.persistence.criteria.CriteriaBuilder#currentTimestamp()}.
- * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
+ *
+ * @return {@link QuerySelection} part of a {@link Criteria#select(Class, QuerySelection...)} call.
*/
QuerySelection<E, Timestamp> currTStamp();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8ed97fb7/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/criteria/selection/strings/Trim.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/criteria/selection/strings/Trim.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/criteria/selection/strings/Trim.java
new file mode 100644
index 0000000..8bb4401
--- /dev/null
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/criteria/selection/strings/Trim.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.data.impl.criteria.selection.strings;
+
+import org.apache.deltaspike.data.impl.criteria.selection.SingularAttributeSelection;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Selection;
+import javax.persistence.metamodel.SingularAttribute;
+
+public class Trim<P> extends SingularAttributeSelection<P, String>
+{
+
+ private final CriteriaBuilder.Trimspec trimspec;
+
+
+ public Trim(SingularAttribute<? super P, String> attribute)
+ {
+ super(attribute);
+ this.trimspec = CriteriaBuilder.Trimspec.BOTH;
+ }
+
+ public Trim(CriteriaBuilder.Trimspec trimspec, SingularAttribute<? super P, String> attribute)
+ {
+ super(attribute);
+ this.trimspec = trimspec;
+ }
+
+ @Override
+ public <R> Selection<String> toSelection(CriteriaQuery<R> query, CriteriaBuilder builder, Path<? extends P> path)
+ {
+ return builder.trim(this.trimspec, path.get(getAttribute()));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8ed97fb7/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CriteriaSupportHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CriteriaSupportHandler.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CriteriaSupportHandler.java
index 91c3ebc..b4eaf6d 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CriteriaSupportHandler.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CriteriaSupportHandler.java
@@ -23,6 +23,7 @@ import java.sql.Time;
import java.sql.Timestamp;
import javax.enterprise.context.Dependent;
+import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.JoinType;
import javax.persistence.metamodel.SingularAttribute;
@@ -43,6 +44,7 @@ import org.apache.deltaspike.data.impl.criteria.selection.numeric.Sum;
import org.apache.deltaspike.data.impl.criteria.selection.strings.Lower;
import org.apache.deltaspike.data.impl.criteria.selection.strings.SubstringFrom;
import org.apache.deltaspike.data.impl.criteria.selection.strings.SubstringFromTo;
+import org.apache.deltaspike.data.impl.criteria.selection.strings.Trim;
import org.apache.deltaspike.data.impl.criteria.selection.strings.Upper;
import org.apache.deltaspike.data.impl.criteria.selection.temporal.CurrentDate;
import org.apache.deltaspike.data.impl.criteria.selection.temporal.CurrentTime;
@@ -162,6 +164,19 @@ public class CriteriaSupportHandler<E> extends AbstractDelegateQueryHandler<E> i
return new SubstringFromTo<E>(attribute, from, length);
}
+ @Override
+ public QuerySelection<E, String> trim(SingularAttribute<? super E, String> attribute)
+ {
+ return new Trim<E>(attribute);
+ }
+
+ @Override
+ public QuerySelection<E, String> trim(CriteriaBuilder.Trimspec trimspec,
+ SingularAttribute<? super E, String> attribute)
+ {
+ return new Trim<E>(trimspec, attribute);
+ }
+
// ----------------------------------------------------------------------------
// TEMPORAL QUERY SELECTION
// ----------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8ed97fb7/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/criteria/CriteriaTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/criteria/CriteriaTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/criteria/CriteriaTest.java
index 3a459ff..1461fea 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/criteria/CriteriaTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/criteria/CriteriaTest.java
@@ -435,6 +435,22 @@ public class CriteriaTest extends TransactionalTestCase
assertEquals(new Integer(1), orderByNameAndCounter.get(1).getCounter());
}
+ @Test
+ public void should_apply_trim()
+ {
+ // given
+ final String name = " should_apply_trim ";
+ createSimple(name, 10);
+
+ // when
+ Object[] objects = repo.queryWithSelectAttributesAndTrim(name);
+ assertNotNull(objects);
+ assertEquals(name, objects[0]);
+ assertEquals(name.trim(), objects[1]);
+ assertEquals("should_apply_trim ", objects[2]);
+ }
+
+
@Override
protected EntityManager getEntityManager()
{
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8ed97fb7/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleCriteriaRepository.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleCriteriaRepository.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleCriteriaRepository.java
index 5273cf2..480814e 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleCriteriaRepository.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleCriteriaRepository.java
@@ -28,6 +28,8 @@ import org.apache.deltaspike.data.test.domain.Simple;
import org.apache.deltaspike.data.test.domain.Simple_;
import org.apache.deltaspike.data.test.domain.SuperSimple_;
+import javax.persistence.criteria.CriteriaBuilder;
+
@Repository
@SuppressWarnings("unchecked")
public abstract class SimpleCriteriaRepository extends AbstractEntityRepository<Simple, Long>
@@ -47,13 +49,13 @@ public abstract class SimpleCriteriaRepository extends AbstractEntityRepository<
{
return criteria()
.or(
- criteria()
- .eqIgnoreCase(Simple_.name, name)
- .notEqIgnoreCase(Simple_.name, nameLike),
- criteria()
- .likeIgnoreCase(Simple_.name, nameLike)
- .notLikeIgnoreCase(Simple_.name, name)
- )
+ criteria()
+ .eqIgnoreCase(Simple_.name, name)
+ .notEqIgnoreCase(Simple_.name, nameLike),
+ criteria()
+ .likeIgnoreCase(Simple_.name, nameLike)
+ .notLikeIgnoreCase(Simple_.name, name)
+ )
.getResultList();
}
@@ -71,17 +73,19 @@ public abstract class SimpleCriteriaRepository extends AbstractEntityRepository<
.getAnyResult();
}
- public List<Simple> findByTimeBetween(Date from, Date to) {
+ public List<Simple> findByTimeBetween(Date from, Date to)
+ {
return criteria()
- .gt(Simple_.temporal, from)
- .lt(Simple_.temporal, to)
- .getResultList();
+ .gt(Simple_.temporal, from)
+ .lt(Simple_.temporal, to)
+ .getResultList();
}
- public Simple findBySuperName(String superName) {
+ public Simple findBySuperName(String superName)
+ {
return criteria()
- .eq(SuperSimple_.superName, superName)
- .getSingleResult();
+ .eq(SuperSimple_.superName, superName)
+ .getSingleResult();
}
public Long criteriaCount(String name)
@@ -121,11 +125,22 @@ public abstract class SimpleCriteriaRepository extends AbstractEntityRepository<
.getResultList();
}
- public List<Simple> findOrderByNameAndCounter() {
- return criteria()
- .orderDesc(Simple_.counter)
- .orderAsc(Simple_.name)
- .getResultList();
- }
+ public List<Simple> findOrderByNameAndCounter()
+ {
+ return criteria()
+ .orderDesc(Simple_.counter)
+ .orderAsc(Simple_.name)
+ .getResultList();
+ }
+
+ public Object[] queryWithSelectAttributesAndTrim(String name)
+ {
+ return criteria()
+ .select(attribute(Simple_.name), trim(Simple_.name),
+ trim(CriteriaBuilder.Trimspec.LEADING, Simple_.name))
+ .eq(Simple_.name, name)
+ .createQuery()
+ .getSingleResult();
+ }
}