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