|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Spring Users Unite!I've noticed on the list some people here - Gaurav Malhotra, etc. had
a goal of using EclipseLink with Spring. How is this going for everyone? I was previously using Eclipselink in an RCP/OSGi environment but recently switched over to Spring (Web MVC) and am probably going through some of the same growing pains: Things I'm interested in: -Your Generic DAO -Generic annotation based CRUD controller? -DisplayTag's PaginatedList implementation? Anyone up for some code share here? I started implementing PaginatedList but ran into some problems due to the lack of a way to programatically set an order by clause via a property name. I have some ideas, but would rather not re-invent the wheel... ./tch _______________________________________________ eclipselink-users mailing list eclipselink-users@... https://dev.eclipse.org/mailman/listinfo/eclipselink-users |
|
|
Re: Spring Users Unite!Here is the GenericDAO
Note:- CrudService is simple..just inject the below GenericDAO Difficult to share the pagination framework. But spring and eclipselink make the things easier. Suggestion:- Think of abstracting Search/SortCriteria/PageInput(since of pagination) offcourse Pageoutput and use PageIterator design pattern import java.io.Serializable; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import javax.persistence.Query; import org.eclipse.persistence.internal.jpa.EntityManagerImpl; import org.eclipse.persistence.queries.ReadAllQuery; import org.eclipse.persistence.queries.ReadObjectQuery; import org.eclipse.persistence.sessions.Session; import org.springframework.orm.jpa.JpaCallback; import org.springframework.orm.jpa.support.JpaDaoSupport; import org.springframework.util.Assert; import com.oracle.healthinsurance.model.entity.Persistable; // all entities extends the interface persistable public class GenericDAOJPAImpl<T extends Persistable> extends JpaDaoSupport implements GenericDAO<T> { public void create(final T t) { Object retVal= getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { em.persist(t); return null; } }); } @SuppressWarnings("unchecked") public T update(final T t) { //return getJpaTemplate().merge(t); T retVal= (T) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws PersistenceException { T updatedValue = em.merge(t); return updatedValue; } }); return retVal; } @SuppressWarnings("unchecked") public void delete(Class clas, Serializable id) { getJpaTemplate().remove(get(clas, id)); } public void delete(T t) { getJpaTemplate().remove(t); } /** * Find in memory object * * @param T * to be searched object */ @SuppressWarnings("unchecked") public List<T> findByExample(final T exampleObject) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { final ReadAllQuery query = new ReadAllQuery(exampleObject.getClass()); query.useCollectionClass(LinkedList.class); query.setExampleObject(exampleObject); EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); Session session = emimpl.getActiveSession(); List<T> results = (List<T>) session.executeQuery(query); return results; } }); return list; } @SuppressWarnings("unchecked") public List<T> findByExample(final ReadAllQuery query) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); Session session = emimpl.getActiveSession(); List<T> results = (List<T>) session.executeQuery(query); return results; } }); return list; } @SuppressWarnings( { "unchecked", "hiding" }) public <T> List<T> selectAll(final Class<T> clazz, String orderClause) { Assert.notNull(orderClause); if (orderClause.contains(",")) { orderClause = orderClause.replaceAll("\\s", ""); String[] orderbys = orderClause.split(","); orderClause = ""; for (int i = 0; i < orderbys.length; i++) { orderClause += "em." + orderbys[i]; if (i < orderbys.length - 1) orderClause += ", "; } } else if (orderClause.trim().length() > 0) { orderClause = "em." + orderClause; } final String ordClause = orderClause; List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws javax.persistence.PersistenceException { StringBuilder queryStr = new StringBuilder(); queryStr.append("SELECT em FROM "); queryStr.append(clazz.getSimpleName()); queryStr.append(" em "); if (ordClause.length() > 0) { queryStr.append(" em ORDER BY "); } logger.debug(queryStr.toString()); final Query query = em.createQuery(queryStr.toString()); return query.getResultList(); } }); return list; } @SuppressWarnings( { "hiding", "unchecked" }) public <T> T findFresh(final Class<T> entityClass, final Object primaryKey) { T retVal = (T) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws javax.persistence.PersistenceException { T result = em.find(entityClass, primaryKey); if (result == null) { return null; } em.refresh(result); return result; } }); return retVal; } // Revisit this method. Do not test it. // <TODO> @SuppressWarnings({ "hiding", "unchecked" }) public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery, final Object... binds) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws javax.persistence.PersistenceException { Query query = em.createNamedQuery(namedQuery); for (int i = 0; i < binds.length; i++) { Object temp = binds[i]; query.setParameter(i+1, temp); } return query.getResultList(); } }); return list; } @SuppressWarnings({ "hiding", "unchecked" }) public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery, final Map<String,Object> binds) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws PersistenceException { Query query = em.createNamedQuery(namedQuery); Set<String> bindKeys = binds.keySet(); for (String key : bindKeys) { Object val = binds.get(key); query.setParameter(key, val); } return query.getResultList(); } }); return list; } @SuppressWarnings({ "hiding", "unchecked" }) public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery, final Map<String,Object> binds, final Map<String, Object> hints) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(final EntityManager em) throws PersistenceException { Query query = em.createNamedQuery(namedQuery); Set<String> bindKeys = binds.keySet(); for (String key : bindKeys) { Object val = binds.get(key); query.setParameter(key, val); } Set<String> hintKeys = hints.keySet(); for (String key : hintKeys) { Object val = hints.get(key); query.setHint(key, val); } return query.getResultList(); } }); return list; } @SuppressWarnings("unchecked") public T get(Class clas, Serializable id) { return (T) getJpaTemplate().find(clas, id); } @SuppressWarnings({ "hiding", "unchecked" }) public <T> List<T> search(final ReadAllQuery readAllQuery) { List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); Session session = emimpl.getActiveSession(); List<T> results = (List<T>) session.executeQuery(readAllQuery); return results; } }); return list; } }
|
|
|
Re: Spring Users Unite!Thanks Guarav,
Neat selectAll with the multi order by, I didn't think of doing that :) As for the pagination, I was hoping someone had already implemented the interface required by the popular Display Tag lib - http://displaytag.sourceforge.net/11/ I'll have to implement it myself soon and will share when done. ./tch On Wed, Oct 15, 2008 at 3:57 AM, Gaurav Malhotra <gaurav.malhotra@...> wrote: > > Here is the GenericDAO > > Note:- CrudService is simple..just inject the below GenericDAO > Difficult to share the pagination framework. But spring and > eclipselink make the things easier. > > Suggestion:- Think of abstracting > Search/SortCriteria/PageInput(since of pagination) offcourse Pageoutput and > use PageIterator design pattern > > import java.io.Serializable; > import java.util.LinkedList; > import java.util.List; > import java.util.Map; > import java.util.Set; > > import javax.persistence.EntityManager; > import javax.persistence.PersistenceException; > import javax.persistence.Query; > > import org.eclipse.persistence.internal.jpa.EntityManagerImpl; > import org.eclipse.persistence.queries.ReadAllQuery; > import org.eclipse.persistence.queries.ReadObjectQuery; > import org.eclipse.persistence.sessions.Session; > import org.springframework.orm.jpa.JpaCallback; > import org.springframework.orm.jpa.support.JpaDaoSupport; > import org.springframework.util.Assert; > > import com.oracle.healthinsurance.model.entity.Persistable; // all entities > extends the interface persistable > > public class GenericDAOJPAImpl<T extends Persistable> extends JpaDaoSupport > implements GenericDAO<T> { > > > public void create(final T t) { > Object retVal= getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(EntityManager em) > throws PersistenceException { > em.persist(t); > return null; > } > }); > } > > @SuppressWarnings("unchecked") > public T update(final T t) { > //return getJpaTemplate().merge(t); > T retVal= (T) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws PersistenceException { > T updatedValue = em.merge(t); > return updatedValue; > } > }); > > return retVal; > } > > > @SuppressWarnings("unchecked") > public void delete(Class clas, Serializable id) { > getJpaTemplate().remove(get(clas, id)); > } > > public void delete(T t) { > getJpaTemplate().remove(t); > } > > /** > * Find in memory object > * > * @param T > * to be searched object > */ > @SuppressWarnings("unchecked") > public List<T> findByExample(final T exampleObject) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(EntityManager em) > throws PersistenceException { > final ReadAllQuery query = new ReadAllQuery(exampleObject.getClass()); > query.useCollectionClass(LinkedList.class); > query.setExampleObject(exampleObject); > EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); > Session session = emimpl.getActiveSession(); > List<T> results = (List<T>) session.executeQuery(query); > > return results; > } > }); > > return list; > } > > @SuppressWarnings("unchecked") > public List<T> findByExample(final ReadAllQuery query) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(EntityManager em) > throws PersistenceException { > EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); > Session session = emimpl.getActiveSession(); > List<T> results = (List<T>) session.executeQuery(query); > > return results; > } > }); > > return list; > } > > > @SuppressWarnings( { "unchecked", "hiding" }) > public <T> List<T> selectAll(final Class<T> clazz, String orderClause) { > Assert.notNull(orderClause); > > if (orderClause.contains(",")) { > orderClause = orderClause.replaceAll("\\s", ""); > String[] orderbys = orderClause.split(","); > orderClause = ""; > for (int i = 0; i < orderbys.length; i++) { > orderClause += "em." + orderbys[i]; > if (i < orderbys.length - 1) > orderClause += ", "; > } > } else if (orderClause.trim().length() > 0) { > orderClause = "em." + orderClause; > } > > final String ordClause = orderClause; > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws javax.persistence.PersistenceException { > StringBuilder queryStr = new StringBuilder(); > queryStr.append("SELECT em FROM "); > queryStr.append(clazz.getSimpleName()); > queryStr.append(" em "); > if (ordClause.length() > 0) { > queryStr.append(" em ORDER BY "); > } > > logger.debug(queryStr.toString()); > > final Query query = em.createQuery(queryStr.toString()); > return query.getResultList(); > } > }); > > return list; > } > > @SuppressWarnings( { "hiding", "unchecked" }) > public <T> T findFresh(final Class<T> entityClass, final Object primaryKey) > { > T retVal = (T) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws javax.persistence.PersistenceException { > T result = em.find(entityClass, primaryKey); > > if (result == null) { > return null; > } > em.refresh(result); > > return result; > } > }); > > return retVal; > } > > // Revisit this method. Do not test it. > // <TODO> > @SuppressWarnings({ "hiding", "unchecked" }) > public <T> List<T> getNamedQuery(final Class<T> entityClass, final String > namedQuery, > final Object... binds) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws javax.persistence.PersistenceException { > Query query = em.createNamedQuery(namedQuery); > > for (int i = 0; i < binds.length; i++) { > Object temp = binds[i]; > query.setParameter(i+1, temp); > } > > return query.getResultList(); > } > }); > > return list; > } > > @SuppressWarnings({ "hiding", "unchecked" }) > public <T> List<T> getNamedQuery(final Class<T> entityClass, final String > namedQuery, > final Map<String,Object> binds) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws PersistenceException { > Query query = em.createNamedQuery(namedQuery); > Set<String> bindKeys = binds.keySet(); > for (String key : bindKeys) { > Object val = binds.get(key); > query.setParameter(key, val); > } > > return query.getResultList(); > } > }); > > return list; > } > > @SuppressWarnings({ "hiding", "unchecked" }) > public <T> List<T> getNamedQuery(final Class<T> entityClass, final String > namedQuery, > final Map<String,Object> binds, final Map<String, Object> hints) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(final EntityManager em) > throws PersistenceException { > Query query = em.createNamedQuery(namedQuery); > Set<String> bindKeys = binds.keySet(); > for (String key : bindKeys) { > Object val = binds.get(key); > query.setParameter(key, val); > } > Set<String> hintKeys = hints.keySet(); > for (String key : hintKeys) { > Object val = hints.get(key); > query.setHint(key, val); > } > > return query.getResultList(); > } > }); > > return list; > } > > > @SuppressWarnings("unchecked") > public T get(Class clas, Serializable id) { > return (T) getJpaTemplate().find(clas, id); > } > > @SuppressWarnings({ "hiding", "unchecked" }) > public <T> List<T> search(final ReadAllQuery readAllQuery) { > List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() { > public Object doInJpa(EntityManager em) > throws PersistenceException { > EntityManagerImpl emimpl = (EntityManagerImpl) em.getDelegate(); > Session session = emimpl.getActiveSession(); > List<T> results = (List<T>) session.executeQuery(readAllQuery); > > return results; > } > }); > return list; > } > } > > Tim Hollosy wrote: >> >> I've noticed on the list some people here - Gaurav Malhotra, etc. had >> a goal of using EclipseLink with Spring. How is this going for >> everyone? I was previously using Eclipselink in an RCP/OSGi >> environment but recently switched over to Spring (Web MVC) and am >> probably going through some of the same growing pains: >> >> Things I'm interested in: >> >> -Your Generic DAO >> -Generic annotation based CRUD controller? >> -DisplayTag's PaginatedList implementation? >> >> Anyone up for some code share here? I started implementing >> PaginatedList but ran into some problems due to the lack of a way to >> programatically set an order by clause via a property name. I have >> some ideas, but would rather not re-invent the wheel... >> >> ./tch >> _______________________________________________ >> eclipselink-users mailing list >> eclipselink-users@... >> https://dev.eclipse.org/mailman/listinfo/eclipselink-users >> >> > > -- > View this message in context: http://www.nabble.com/Spring-Users-Unite%21-tp19919618p19988656.html > Sent from the EclipseLink - Users mailing list archive at Nabble.com. > > _______________________________________________ > eclipselink-users mailing list > eclipselink-users@... > https://dev.eclipse.org/mailman/listinfo/eclipselink-users > eclipselink-users mailing list eclipselink-users@... https://dev.eclipse.org/mailman/listinfo/eclipselink-users |
|
|
Re: Spring Users Unite!I just posted a thread to this group regarding Spring, JUnit4 and EclipseLink JPA. Perhaps you might have more insight into this than I. See http://www.nabble.com/Weaving-in-Spring-problem-td20003299.html
|
| Free embeddable forum powered by Nabble | Forum Help |