我正在为我的 dao 层寻找更清晰的代码:
我有一个通用的 dao 接口(interface):
public interface GenericDAO<T> {
T save(T entity);
T merge(T entity);
void delete(T entity);
T findFromId(int id);
List<T> findAll();
}
抽象实现:
public abstract class AbstractGenericDAOImpl<T> implements GenericDAO<T> {
[...]
}
对于每个数据库实体,我有两个文件:
接口(interface):
public interface UserDAO extends GenericDAO<UserPE> { }
具体类:
@Repository
public class UserDAOImpl extends AbstractGenericDAOImpl<UserPE> implements UserDAO {
[ no code for most entities ]
}
我正在使用这样的 Spring 注入(inject):
@Autowired
private UserDAO userDao;
我想对常见实体使用通用 dao,例如:
@Autowired
private GenericDAO<MyEntity> myEntityDao;
但是spring不想注入(inject)它(NoSuchBeanDefinitionException)并且我不知道如何配置hibernate查询(需要实体类)。
我正在使用: Spring 3.1.0 hibernate 3.6.3 安心2.3.7
你有什么想法吗?
感谢您的阅读。
最佳答案
如果您使用Spring 4,您将能够使用
@Autowired
private GenericDAO<MyEntity> myEntityDao;
如果有 GenericDAO 的实现而不做任何其他事情。
Spring 3 中缺少这种功能。 查看this博客文章了解更多详细信息。
但是,如果您将 Spring 4 引入您的项目,您可能会破坏与 RestEasy 的集成。这是您需要检查的事情。
关于java - 使用 Resteasy/Hibernate/Spring 简化 DAO 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454701/