2012-03-02 2 views
2

Я использовал инструменты Hibernate Eclipse для создания DAO-реализации, но использует «javax.persistence.EntityManager». Я хочу создать DAO impl на основе моей сопоставленной сущности (используя аннотации JPA), которые используют шаблон Hibernate, предоставленный Spring Framework. Как я могу это сделать?hibernate tools & hibernate template in DAO

+0

Я нашел онлайн «Строитель Skyway». Является полезным инструментом? – observer

+2

HibernateTemplate почти не рекомендуется (документация советует не использовать его больше). Как насчет создания DAO самостоятельно? Вы могли бы узнать больше, чем создавать волшебные инструменты для вас. –

+0

спасибо за совет. Поэтому я могу использовать стандартный EntityManager? – observer

ответ

0

Так мы использовали для создания объектов DAO, основанных на общей реализации DAO Impl, с использованием шаблона Hibernate, предоставленного Spring Framework.

Создание DAO класса Java с FTL, и образец выглядит

@Repository("hrdb.UserDao") 
public class UserDao extends WMGenericDaoImpl <User, Integer> { 

    @Autowired 
    @Qualifier("hrdbTemplate") 
    private HibernateTemplate template; 

    public HibernateTemplate getTemplate() { 
     return this.template; 
    } 
} 

И это, как наш общий DAO осущ выглядит

public abstract class WMGenericDaoImpl<Entity extends Serializable, Identifier extends Serializable> implements WMGenericDao<Entity, Identifier> { 

    private Class<Entity> entityClass; 

    public abstract HibernateTemplate getTemplate(); 

    @SuppressWarnings("unchecked") 
    @PostConstruct 
    public void init() { 
     if (getTemplate() == null) 
      throw new RuntimeException("hibernate template is not set."); 

     ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass(); 
     this.entityClass = (Class<Entity>) genericSuperclass.getActualTypeArguments()[0]; 
    } 

    public Entity create(Entity entity) { 
     Identifier identifier = (Identifier) getTemplate().save(entity); 
     return findById(identifier); 
    } 

    public void update(Entity entity) { 
     getTemplate().update(entity); 
     getTemplate().flush(); 
    } 

    public void delete(Entity entity) { 
     getTemplate().delete(entity); 
    } 

    public Entity findById(Identifier entityId) { 
     return getTemplate().get(entityClass, entityId); 
    } 
} 

Ofcourse здесь является WMGenericDao интерфейс,

public interface WMGenericDao<Entity, Identifier> { 

    Entity create(Entity entity); 

    void update(Entity entity); 

    void delete(Entity entity); 

    Entity findById(Identifier entityId); 
} 

И HibernateTemplate объявлен весной. Xml. С такой реализацией мы можем генерировать весь класс DAO в обратном процессе разработки, используя шаблон спящего режима, предоставленный весной.

0

Посмотрите на TypeTools. README имеет пример generic DAO:

class Device {} 
class Router extends Device {} 

class GenericDAO<T, ID extends Serializable> { 
    protected Class<T> persistentClass; 
    protected Class<ID> idClass; 

    private GenericDAO() { 
    Class<?>[] typeArguments = TypeResolver.resolveRawArguments(GenericDAO.class, getClass()); 
    this.persistentClass = (Class<T>) typeArguments[0]; 
    this.idClass = (Class<ID>) typeArguments[1]; 
    } 
} 

class DeviceDAO<T extends Device> extends GenericDAO<T, Long> {} 
class RouterDAO extends DeviceDAO<Router> {}