diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index 63905110a6..5753002691 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -80,6 +80,11 @@ spring-orm ${org.springframework.version} + + org.springframework.data + spring-data-jpa + ${spring-data-jpa.version} + org.hibernate hibernate-core @@ -210,6 +215,7 @@ 4.2.2.Final 5.1.25 + 1.3.2.RELEASE 1.7.5 diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IOperations.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/IOperations.java similarity index 77% rename from spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IOperations.java rename to spring-security-rest-full/src/main/java/org/baeldung/persistence/IOperations.java index 1c84b06c85..3c6f86a78b 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IOperations.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/persistence/IOperations.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao.common; +package org.baeldung.persistence; import java.io.Serializable; import java.util.List; @@ -9,7 +9,7 @@ public interface IOperations { List findAll(); - void create(final T entity); + T create(final T entity); T update(final T entity); diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java index fc3928d8a6..b643516d06 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java @@ -1,8 +1,9 @@ package org.baeldung.persistence.dao; -import org.baeldung.persistence.dao.common.IOperations; import org.baeldung.persistence.model.Foo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -public interface IFooDao extends IOperations { +public interface IFooDao extends JpaRepository, JpaSpecificationExecutor { // } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java deleted file mode 100644 index 65e57afcb3..0000000000 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.baeldung.persistence.dao.common; - -import java.io.Serializable; -import java.util.List; - -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import com.google.common.base.Preconditions; - -@SuppressWarnings("unchecked") -public abstract class AbstractHibernateDao implements IOperations { - private Class clazz; - - @Autowired - private SessionFactory sessionFactory; - - // API - - protected final void setClazz(final Class clazzToSet) { - clazz = Preconditions.checkNotNull(clazzToSet); - } - - @Override - public final T findOne(final long id) { - return (T) getCurrentSession().get(clazz, id); - } - - @Override - public final List findAll() { - return getCurrentSession().createQuery("from " + clazz.getName()).list(); - } - - @Override - public final void create(final T entity) { - Preconditions.checkNotNull(entity); - // getCurrentSession().persist(entity); - getCurrentSession().saveOrUpdate(entity); - } - - @Override - public final T update(final T entity) { - Preconditions.checkNotNull(entity); - return (T) getCurrentSession().merge(entity); - } - - @Override - public final void delete(final T entity) { - Preconditions.checkNotNull(entity); - getCurrentSession().delete(entity); - } - - @Override - public final void deleteById(final long entityId) { - final T entity = findOne(entityId); - Preconditions.checkState(entity != null); - delete(entity); - } - - protected final Session getCurrentSession() { - return sessionFactory.getCurrentSession(); - } - -} \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/GenericHibernateDao.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/GenericHibernateDao.java deleted file mode 100644 index 47ed130878..0000000000 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/GenericHibernateDao.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.persistence.dao.common; - -import java.io.Serializable; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Repository; - -@Repository -@Scope(BeanDefinition.SCOPE_PROTOTYPE) -public class GenericHibernateDao extends AbstractHibernateDao implements IGenericDao { - // -} \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IGenericDao.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IGenericDao.java deleted file mode 100644 index b7876deea4..0000000000 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/common/IGenericDao.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.baeldung.persistence.dao.common; - -import java.io.Serializable; - -public interface IGenericDao extends IOperations { - // -} diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java index 8774320450..2bfe395df0 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java @@ -1,6 +1,6 @@ package org.baeldung.persistence.service; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.IOperations; import org.baeldung.persistence.model.Foo; public interface IFooService extends IOperations { diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java index 3b32bc3ebb..406a958eec 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java @@ -3,30 +3,35 @@ package org.baeldung.persistence.service.common; import java.io.Serializable; import java.util.List; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.IOperations; +import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Transactional; +import com.google.common.collect.Lists; + @Transactional public abstract class AbstractService implements IOperations { @Override + @Transactional(readOnly = true) public T findOne(final long id) { return getDao().findOne(id); } @Override + @Transactional(readOnly = true) public List findAll() { - return getDao().findAll(); + return Lists.newArrayList(getDao().findAll()); } @Override - public void create(final T entity) { - getDao().create(entity); + public T create(final T entity) { + return getDao().save(entity); } @Override public T update(final T entity) { - return getDao().update(entity); + return getDao().save(entity); } @Override @@ -36,9 +41,9 @@ public abstract class AbstractService implements IOperat @Override public void deleteById(final long entityId) { - getDao().deleteById(entityId); + getDao().delete(entityId); } - protected abstract IOperations getDao(); + protected abstract PagingAndSortingRepository getDao(); } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java index af77bef981..81bd37e3df 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java @@ -1,11 +1,11 @@ package org.baeldung.persistence.service.impl; import org.baeldung.persistence.dao.IFooDao; -import org.baeldung.persistence.dao.common.IOperations; import org.baeldung.persistence.model.Foo; import org.baeldung.persistence.service.IFooService; import org.baeldung.persistence.service.common.AbstractService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,7 +23,7 @@ public class FooService extends AbstractService implements IFooService { // API @Override - protected IOperations getDao() { + protected PagingAndSortingRepository getDao() { return dao; } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java index 0c79b1aaa8..93f7f3622f 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; @@ -22,6 +23,7 @@ import com.google.common.base.Preconditions; @EnableTransactionManagement @PropertySource({ "classpath:persistence-mysql.properties" }) @ComponentScan({ "org.baeldung.persistence" }) +@ImportResource("classpath*:springDataPersistenceConfig.xml") public class PersistenceConfig { @Autowired diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java index b20eb3005e..cf4b976b90 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java @@ -47,7 +47,7 @@ public class FooController { @RequestMapping(value = "admin/foo/{id}", method = RequestMethod.GET) @ResponseBody public Foo get(@PathVariable("id") final Long id, final HttpServletRequest request, final HttpServletResponse response) { - final Foo resourceById = Preconditions.checkNotNull(service.getById(id)); + final Foo resourceById = Preconditions.checkNotNull(service.findOne(id)); eventPublisher.publishEvent(new SingleResourceRetrieved(this, request, response)); return resourceById; @@ -57,7 +57,7 @@ public class FooController { @ResponseStatus(HttpStatus.CREATED) public void create(@RequestBody final Foo resource, final HttpServletRequest request, final HttpServletResponse response) { Preconditions.checkNotNull(resource); - final Long idOfCreatedResource = service.create(resource); + final Long idOfCreatedResource = service.create(resource).getId(); eventPublisher.publishEvent(new ResourceCreated(this, request, response, idOfCreatedResource)); } diff --git a/spring-security-rest-full/src/main/resources/springDataPersistenceConfig.xml b/spring-security-rest-full/src/main/resources/springDataPersistenceConfig.xml new file mode 100644 index 0000000000..a42410a49e --- /dev/null +++ b/spring-security-rest-full/src/main/resources/springDataPersistenceConfig.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file