| /** |
| * |
| */ |
| package org.apache.continuum.store.jpa; |
| |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.continuum.model.CommonUpdatableEntity; |
| import org.apache.continuum.store.api.EntityNotFoundException; |
| import org.apache.continuum.store.api.Query; |
| import org.apache.continuum.store.api.Store; |
| import org.apache.continuum.store.api.StoreException; |
| import org.springframework.orm.jpa.JpaObjectRetrievalFailureException; |
| import org.springframework.transaction.annotation.Transactional; |
| |
| /** |
| * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a> |
| * @version $Id$ |
| * @since 1.2 |
| */ |
| public class JpaStore<T extends CommonUpdatableEntity, Q extends Query<T>> extends StoreSupport implements Store<T, Q> |
| { |
| |
| /** |
| * @{inheritDoc} |
| * |
| * @see org.apache.continuum.store.api.Store#delete(java.lang.Object) |
| */ |
| @Transactional( readOnly = false ) |
| public void delete( T entity ) throws StoreException |
| { |
| getJpaTemplate().remove( entity ); |
| } |
| |
| /** |
| * @{inheritDoc} |
| * |
| * @see org.apache.continuum.store.api.Store#lookup(Class, java.lang.Long) |
| */ |
| public T lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException |
| { |
| if ( id == null ) |
| throw new EntityNotFoundException(); |
| T entity = null; |
| try |
| { |
| entity = getJpaTemplate().find( klass, id ); |
| } |
| catch ( JpaObjectRetrievalFailureException e ) |
| { |
| throw new EntityNotFoundException(); |
| } |
| if ( entity == null ) |
| throw new EntityNotFoundException(); |
| return entity; |
| } |
| |
| /** |
| * @{inheritDoc} |
| * |
| * @see org.apache.continuum.store.api.Store#query(org.apache.continuum.store.api.Query) |
| */ |
| public List<T> query( Q query ) throws StoreException |
| { |
| Map<String, Object> where = new HashMap<String, Object>(); |
| String q = query.toString( where ); |
| |
| List<T> results = find( q, where, 0, 0 ); |
| |
| return results; |
| } |
| |
| /** |
| * @{inheritDoc} |
| * |
| * @see org.apache.continuum.store.api.Store#save(java.lang.Object) |
| */ |
| @Transactional( readOnly = true ) |
| public T save( T entity ) throws StoreException |
| { |
| if ( null != entity ) |
| { |
| if ( null == entity.getId() ) |
| getJpaTemplate().persist( entity ); |
| else |
| entity = getJpaTemplate().merge( entity ); |
| } |
| return entity; |
| } |
| |
| } |