[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] EclipseLink equivalent of Hibernate
|
EclipseLink has Query By Example code but our options are configured
through a policy
(http://www.eclipse.org/eclipselink/api/1.0.1/org/eclipse/persistence/queries/QueryByExamplePolicy.html
).
An equivalent policy may look like:
QueryByExamplePolicy policy = new QueryByExamplePolicy();
policy.excludeValue(new Integer(0));
policy.addSpecialOperation(String.class, "likeIgnoreCase");
query.setQueryByExamplePolicy(policy);
This policy can then be used on any QueryByExample query. If you want
to control MatchMode you will need to update the string attributes of
the example to contain the pattern you want.
You can create a JPA query from an EclipseLink query by using the EM
((JPAEntityManager)em.getDelegate).createQuery(DatabaseQuery).
--Gordon
Gaurav Malhotra wrote:
The below is my generic search written in hibernate.
Question
1. What is an equivalent of
.ignoreCase().excludeZeroes().enableLike(MatchMode.ANYWHERE); in
eclipselink.
public SearchResult loadAll(final SearchInput input) {
final Persistable persistable = ((CrudSearchCriteria) input
.getSearchCriteria()).getPersistable();
logger.info("Persistable received is " + persistable);
final SortCriteria sc = input.getSortCriteria();
PageInput pi = input.getPageInput();
List list = (List) getJpaTemplate().execute(new JpaCallback() {
public Object doInJpa(javax.persistence.EntityManager em)
throws javax.persistence.PersistenceException {
final Example example = Example.create(persistable)
.ignoreCase().excludeZeroes().enableLike(
MatchMode.ANYWHERE);
Criteria criteria = ((Session) em.getDelegate())
.createCriteria(persistable.getClass()).add(example)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Order order = null;
if (sc.getName(0) != null)
order = sc.isAscendingOrder(0) ? Order.asc(sc.getName(0))
: Order.desc(sc.getName(0));
if (order != null)
criteria = criteria.addOrder(order);
return criteria.list();
}
});
SearchResult result = new SearchResult();
PageResult pageResult = new PageResult();
int rowsAvailable = list.size();
pageResult.setRowsAvailable(rowsAvailable);
result.setPageResult(pageResult);
list = list.subList(pi.getStartRow(rowsAvailable), pi
.getEndRow(rowsAvailable));
pageResult.setList(list);
return result;
}