Я использовал инструменты Hibernate Eclipse для создания DAO-реализации, но использует «javax.persistence.EntityManager». Я хочу создать DAO impl на основе моей сопоставленной сущности (используя аннотации JPA), которые используют шаблон Hibernate, предоставленный Spring Framework. Как я могу это сделать?hibernate tools & hibernate template in DAO
2
A
ответ
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> {}
Я нашел онлайн «Строитель Skyway». Является полезным инструментом? – observer
HibernateTemplate почти не рекомендуется (документация советует не использовать его больше). Как насчет создания DAO самостоятельно? Вы могли бы узнать больше, чем создавать волшебные инструменты для вас. –
спасибо за совет. Поэтому я могу использовать стандартный EntityManager? – observer