import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
-import org.hibernate.LockMode;\r
+import org.hibernate.LockOptions;\r
import org.hibernate.Session;\r
import org.springframework.context.ApplicationContext;\r
import org.springframework.context.ApplicationContextAware;\r
+import org.springframework.dao.DataAccessException;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
-import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
@Override\r
@Transactional(readOnly = true)\r
- public void lock(T t, LockMode lockMode) {\r
- dao.lock(t, lockMode);\r
+ public void lock(T t, LockOptions lockOptions) {\r
+ dao.lock(t, lockOptions);\r
}\r
\r
@Override\r
@Transactional(readOnly = true)\r
- public void refresh(T t, LockMode lockMode, List<String> propertyPaths) {\r
- dao.refresh(t, lockMode, propertyPaths);\r
+ public void refresh(T t, LockOptions lockOptions, List<String> propertyPaths) {\r
+ dao.refresh(t, lockOptions, propertyPaths);\r
}\r
\r
@Override\r
\r
@Override\r
@Transactional(readOnly = false)\r
- public UUID delete(T persistentObject) throws ReferencedObjectUndeletableException {\r
- return dao.delete(persistentObject);\r
+ public DeleteResult delete(T persistentObject) {\r
+ DeleteResult result = new DeleteResult();\r
+ try{\r
+ dao.delete(persistentObject);\r
+ } catch(DataAccessException e){\r
+ result.setError();\r
+ result.addException(e);\r
+ }\r
+ return result;\r
}\r
\r
@Override\r
@Override\r
@Transactional(readOnly = true)\r
public T find(UUID uuid) {\r
- return dao.findByUuid(uuid);\r
+ return uuid == null ? null : dao.findByUuid(uuid);\r
+ }\r
+\r
+ @Override\r
+ @Transactional(readOnly = true)\r
+ public T findWithoutFlush(UUID uuid) {\r
+ return uuid == null ? null : dao.findByUuidWithoutFlush(uuid);\r
}\r
\r
@Override\r
\r
@Override\r
@Transactional(readOnly = true)\r
- public List<T> list(Class<? extends T> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
+ public <S extends T> List<S> list(Class<S> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
return dao.list(type,limit, start, orderHints,propertyPaths);\r
}\r
\r
@Override\r
@Transactional(readOnly = true)\r
public T load(UUID uuid) {\r
- return dao.load(uuid);\r
+ return uuid == null ? null : dao.load(uuid);\r
}\r
\r
@Override\r
@Transactional(readOnly = true)\r
public T load(UUID uuid, List<String> propertyPaths){\r
- return dao.load(uuid, propertyPaths);\r
+ return uuid == null ? null : dao.load(uuid, propertyPaths);\r
}\r
\r
@Override\r
\r
@Override\r
@Transactional(readOnly = true)\r
- public Pager<T> page(Class<? extends T> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
+ public <S extends T> Pager<S> page(Class<S> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
Integer numberOfResults = dao.count(type);\r
- List<T> results = new ArrayList<T>();\r
+ List<S> results = new ArrayList<S>();\r
pageNumber = pageNumber == null ? 0 : pageNumber;\r
if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
Integer start = pageSize == null ? 0 : pageSize * pageNumber;\r
results = dao.list(type, pageSize, start, orderHints,propertyPaths);\r
}\r
- return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
+ return new DefaultPagerImpl<S>(pageNumber, numberOfResults, pageSize, results);\r
}\r
\r
@Override\r
return dao.list(example, includeProperties, limit, start, orderHints, propertyPaths);\r
}\r
\r
+\r
+\r
}\r