我使用Hibernate工具Eclipse插件來生成DAO實現,但它使用了「javax.persistence.EntityManager」。我想基於使用Spring Framework提供的Hibernate模板的映射實體(使用JPA註釋)生成DAO impl。我怎樣才能做到這一點?DAO中的hibernate工具和休眠模板
2
A
回答
0
這是我們如何使用Spring Framework提供的Hibernate模板來生成基於DAO Impl的通用實現的DAO對象。
生成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在spring.xml中聲明。 通過這種實現,我們可以使用Spring提供的hibernate模板,在逆向工程過程中生成所有DAO類。
0
看一看TypeTools。自述文件有一個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> {}
相關問題
- 1. 休眠模型類和DAO
- 2. 休眠DAO工廠不能實例DAO
- 3. DAO和休眠的區別
- 4. 休眠DAO實現
- 5. 使用DAO休眠
- 6. 通用休眠DAO
- 7. 休眠DAO錯誤
- 8. 休眠DAO設計
- 9. 使用休眠時的DAO模式
- 10. 如何使用休眠工具生成自定義的DAO
- 11. 測試休眠模型/ DAO類
- 12. Spring + Hibernate的,自動裝配SessionFactory的進入休眠DAO
- 13. 休眠模板的問題
- 14. 休眠:DAO且僅標識
- 15. 休眠DAO方法參數
- 16. 通用DAO休眠Java
- 17. 休眠一到一個DAO
- 18. 休眠通用DAO搜索
- 19. 休眠工具代碼自動生成模板eclipse
- 20. 休眠模板事務
- 21. 搬出休眠模板
- 22. 休眠JPA模板提取
- 23. 休眠模板翻譯
- 24. Maven與休眠工具
- 25. 休眠查詢工具
- 26. 休眠工具 - 「版本」列
- 27. 休眠螞蟻工具
- 28. Hibernate和Spring DAO
- 29. 休眠 - 刪除日食休眠工具HQL
- 30. 休眠會話工廠多個DAO的一個新會話
我在網上找到「Skyway builder」。是一個有用的工具? – observer 2012-03-02 10:57:04
HibernateTemplate幾乎不推薦使用(文檔建議不要再使用它)。如何自己生成DAO?你會學到的不僅僅是用魔法工具爲你生成它們。 – 2012-03-02 12:46:40
感謝您的建議。所以我可以使用默認的EntityManager? – observer 2012-03-02 14:47:13