package com.tap5.hotelbooking.dal; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.apache.tapestry5.ioc.annotations.Inject; import org.hibernate.Query; import org.hibernate.Session; /** * Hibernate CrudService * * @author karesti * @param <T>, type entity * @param <PK>, primarykey, the primary key */ public class HibernateCrudServiceDAO implements CrudServiceDAO { @Inject private Session session; public <T> T create(T t) { session.persist(t); session.flush(); session.refresh(t); return t; } @SuppressWarnings("unchecked") public <T, PK extends Serializable> T find(Class<T> type, PK id) { return (T) session.get(type, id); } public <T> T update(T type) { session.merge(type); return type; } public <T, PK extends Serializable> void delete(Class<T> type, PK id) { @SuppressWarnings("unchecked") T ref = (T) session.get(type, id); session.delete(ref); } @SuppressWarnings("unchecked") public <T> List<T> findWithNamedQuery(String queryName) { return session.getNamedQuery(queryName).list(); } @SuppressWarnings("unchecked") public <T> List<T> findWithNamedQuery(String queryName, Map<String, Object> params) { Set<Entry<String, Object>> rawParameters = params.entrySet(); Query query = session.getNamedQuery(queryName); for (Entry<String, Object> entry : rawParameters) { query.setParameter(entry.getKey(), entry.getValue()); } return query.list(); } @SuppressWarnings("unchecked") public <T> T findUniqueWithNamedQuery(String queryName) { return (T) session.getNamedQuery(queryName).uniqueResult(); } @SuppressWarnings("unchecked") public <T> T findUniqueWithNamedQuery(String queryName, Map<String, Object> params) { Set<Entry<String, Object>> rawParameters = params.entrySet(); Query query = session.getNamedQuery(queryName); for (Entry<String, Object> entry : rawParameters) { query.setParameter(entry.getKey(), entry.getValue()); } return (T) query.uniqueResult(); } }