package org.xmx0632.deliciousfruit.repository.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.xmx0632.deliciousfruit.entity.Config;
import org.xmx0632.deliciousfruit.repository.ConfigCachedDao;
/**
* 自定义Dao实现类例子
*
* @author xmx0632
*
*/
public class ConfigDaoImpl implements ConfigCachedDao {
private static final String ORG_HIBERNATE_CACHEABLE = "org.hibernate.cacheable";
@Autowired(required = true)
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
public EntityManager getEntityManager() {
if (entityManager == null) {
System.out.println("create entityManager");
entityManager = entityManagerFactory.createEntityManager();
}
return entityManager;
}
@Override
public Config findByNameCachedJpa(String name) {
TypedQuery<Config> query = getEntityManager().createQuery(
"from Config where name = :name", Config.class);
query.setParameter("name", name);
query.setHint(ORG_HIBERNATE_CACHEABLE, Boolean.TRUE);
return query.getSingleResult();
}
@Override
public Config findByNameCachedHibernate(String name) {
TypedQuery<Config> query = getEntityManager().createQuery(
"from Config where name = :name", Config.class);
org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class);
hquery.setParameter("name", name);
hquery.setCacheable(true);
return (Config) hquery.uniqueResult();
}
@Override
public List<Config> findAllByNameCachedJpa(String name) {
TypedQuery<Config> query = getEntityManager().createQuery(
"from Config where name = :name", Config.class);
query.setParameter("name", name);
query.setHint(ORG_HIBERNATE_CACHEABLE, Boolean.TRUE);
return query.getResultList();
}
@Override
public List<Config> findAllByNameCachedHibernate(String name) {
TypedQuery<Config> query = getEntityManager().createQuery(
"from Config where name = :name", Config.class);
org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class);
hquery.setParameter("name", name);
hquery.setCacheable(true);
return hquery.list();
}
}