问题标签 [genericdao]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2857 浏览

java - 通用 dao 架构讨论-最佳实践

我正在考虑做这个架构

genericdao +interface ---> servicelayer+interface---> 视图层

我的 dao 将只有通用方法,例如我的服务层将有真正的逻辑

服务层法

你这是好架构吗

我的问题是是否适合将“select ..”语句从 dao 移动到服务层

0 投票
7 回答
15686 浏览

java - java中的通用DAO

我正在尝试在 java 中开发通用 DAO。我尝试了以下方法。这是实现通用 DAO 的好方法吗?我不想使用休眠。我试图使其尽可能通用,这样我就不必一遍又一遍地重复相同的代码。

我现在有:

0 投票
2 回答
2334 浏览

spring - 最新的,符合 JPA 的 GenericDAO 实现

我读了这篇文章:

http://www.ibm.com/developerworks/java/library/j-genericdao.html

几次,相信我明白它在说什么。但是,它已经 4 岁了,我有一个符合 JPA 的 Java 应用程序要处理。另外,我看到 Spring 中有一个 JPATemplate 有一些很好的功能,但是 Spring 文档说它已经被弃用了!

任何人都可以指出一个可靠的、现代的、符合 JPA 的、基于 Spring 的 GenericDAOImpl 的工作示例,它代理一个接口以提供通用的查找器执行?

0 投票
3 回答
876 浏览

python - 如何为Sqlalchemy中的各种模型编写一个通用的get_by_id()方法?

我正在使用带有 sqlalchemy 的塔。我有几个模型,发现自己一次又一次地写这样的代码:

由于模型都是扩展类Base,有没有办法定义一个通用的get_by_id()方法?

所以我可以将它用作:

0 投票
2 回答
20932 浏览

java - 抽象 DAO 模式和 Spring 的“Proxy cannot be cast to ...”问题!

我知道这经常被问到,但我找不到可行的解决方案:

这是我的 AbstractDAO :

这是我的 JPA 的实现:

这是一个实体的道:

这是它的实现:

整个架构很简单:

接口AbstractDao定义了简单的 CRUD 方法。

接口PersonDao扩展了 AbstractDAO,没有任何附加方法。

AbstractDaoJpaImpl定义了 JPA 的 AbstractDao 实现

PersonDaoImpl扩展了 AbstractDaoJpaImpl 并实现了 PersonDao AND OtherInterface ,它添加了附加方法() ...

如果, PersonDaoImpl 只实现 PersonDao ,没有实现 OtherInterface.additionalMethods() ,一切正常。

我可以用

在我春天的 XML 文件中。

但是, PersonDaoImpl 实现 OtherInterface(s) ,在测试/运行时,我必须将 DAO 从 PersonDao 转换为 PersonDaoImpl 或 OtherInterfaces,例如:

问题发生时(PersonDaoImpl) dao,抛出“Proxy cannot be cast to PersonDaoImpl”异常:

google的时候经常会问到这个,大家建议proxy-target-class="true"加到<tx:annotation-driven>

这将使用 CGLIB 而不是 JDK 的动态代理。

但是在初始化 Spring 时它会引发另一个异常:

在 AbstractDaoJpaImpl 的构造函数中:

每个问题都停在这里,我现在找不到任何可行的解决方案。

谁能给我一个可行的解决方案?非常感谢 !

环境:Spring-3.0.4,javaee-api-6.0,javax.inject,cglib-2.2,hibernate-jpa-2.0-api-1.0.0,

0 投票
5 回答
88935 浏览

java - 单个 DAO 和通用 CRUD 方法(JPA/Hibernate + Spring)

根据我之前的问题,DAO 和服务层(JPA/Hibernate + Spring),我决定在使用 JPA/Hibernate、Spring 和 Wicket 的应用程序中只使用一个 DAO 作为我的数据层(至少在开始时)。提出了使用通用 CRUD 方法,但我不太确定如何使用 JPA 来实现它。你能给我一个例子或分享一个关于这个的链接吗?

0 投票
1 回答
468 浏览

entity-framework - 从父 DAO 扩展的子级

我有个问题。我有一个父 DAO:

从中扩展了另一个子 DAO。当我想对子 DAO 中的子实体进行一些操作时,我必须从父类获取 EntityManager 对象或将 entityManager 对象声明更改为受保护,这是糟糕的 OOP 设计。还有另一种方法可以做到这一点吗?因为当我有 100 个 DAO 孩子时,我必须为每个新孩子从父 DAO 获取 entityManager。

0 投票
1 回答
5778 浏览

java-ee-6 - 使用 CDI/Weld 注入通用 Bean

我刚刚来自我小小的 JavaSE/Guice 世界,目前正在发现“由容器携带”-EE6 的路径。在 Glassfish3.1 遇到一些问题后,我刚刚切换到 JBoss,现在面临一个不应该出现的问题。

作为基础设施辅助类,我正在尝试为任何类型的实体创建通用存储库/DAO。以一种非常简单的方式,这可能看起来像这样。

现在可能有一个 bean 不需要依赖于实体的查询功能,而只需要某种实体类型的存储库,例如(可能是一个测试用例):

不幸的是,Weld 似乎不喜欢这种通用注入。在部署时,我收到以下错误:

我是否遗漏了什么或者他们只是忘记了实现通用注入?据我了解通用的东西,无论如何它都会在编译后被删除——即使到目前为止这在 guice3 中工作得很好。

亲切的问候,

avi

编辑:发现garvin king的评论说这种行为在规范中,但没有在焊接中实现,(状态是在 2009 年 6 月)

0 投票
4 回答
3015 浏览

java - Java DAO 工厂动态返回的对象类型

我正在尝试编写简单的 DAO,它将根据存储在 String 字段中的类型创建实体对象。如何返回动态更改的类型?UserDAO 类的方法 findById() 应该返回 User 类对象。ProductDAO 的相同方法应该返回 Product。我不想在每个扩展 DAO 的类中实现 findById,它应该自动完成。

示例代码:

0 投票
1 回答
850 浏览

hibernate - Hibernate Generic DAO - 测试生成的 SQL 是否正确

我有一个 DAO 基础设施,如下所示:

StoreDao、CouponDao、PersonDao

所有这些都从具有大部分功能(使用 Java 泛型)的GenericDao扩展而来。在这里解释一下 - [http://www.ibm.com/developerworks/java/library/j-genericdao/index.html][1]

当在 StoreDao 上调用 getAll() 时,实际调用的是 GenericDao 的 getAll(),它将某些默认 where 子句(如 active=true, expires>now() 附加到要执行的现有 HQL 查询中。

我们有一堆在 setup() 中创建数据的 Dao 测试,还有一堆断言响应的测试。不完全是单元测试,因为数据库没有被模拟,但我猜可以称为集成测试。

我的一个队友创建了一个测试基础设施来测试生成的 sql 查询是否准确。他这样做的方式如下:

有一个自定义的 Hibernate 拦截器,它拦截 onPrepareStatement(),使用 Hibernate 的 ASTParser 创建即将执行的 Query 的 XML 结构,然后使用 XPaths 来验证查询,例如,查看 where 子句中是否存在某些字段,连接是正确的等。

我们这样做是为了单独测试 Generic Dao。为此,我们必须创建 GenericDomain、GenericChildDomain、GenericDomain.hbm.xml 以及支持这些的表。

问题:

这值得吗?除非我们已经为我们已经拥有的所有单元测试完全模拟了数据库,否则我认为我们没有理由创建这个基础设施。

我们怎么能不使用我们已有的基础设施来测试 HQL。如果要确保将 active=true 附加到查询中,只需确保 DAO 不会返回 active=false 的数据。

最后,我们在这里所做的非常依赖于休眠,如果我们决定用 IBatis/JPA-EclipseLink/NoSQL 替换我们的 DAO,它们大部分都会被丢弃。

最后,我们为什么要发明这样的东西。这不是一个相当普遍的问题吗?不是有人已经建立了解决方案吗?