问题标签 [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 投票
3 回答
8059 浏览

java - Spring Generic Dao 类名

我已经为我的 spring/hibernate 项目配置了一个自定义的通用服务 DAO——我的想法是我可以从我的控制器中轻松地重用它。

它基本上看起来像这样:

哪个被引用:

但是,该String clip = e.getName()行会引发 Null 指针异常。如果我将类移动到属性部分,我可以让它工作(所以addressService.get(Address.class, 1)但我发现这有点不整洁,特别是当有多个不同的类被调用时。

有什么方法可以让类正确生成一个值,而无需重复将其添加到我的所有函数中?

提前致谢。

0 投票
1 回答
3078 浏览

design-patterns - 如何在 GenericDAO 中使用工厂设计模式?

我想为我的 DAO 层应用通用设计模式,这样我就可以轻松地在第三方 ORM(Hibernate、JPA 等)之间切换。显然,我们有一些适用于所有 DAO 的通用方法,例如:

  • 公共无效创建(T实体);
  • 公共无效更新(T实体);
  • 公共无效删除(对象pk);
  • 公共T读取(对象pk);
  • 公共列表 readAll();

所有 DAO 都必须继承这些方法以及每个 DAO 特定的附加方法,我发现以下设计模式适合我,但我不知道如何使用它才能让所有常用方法和专用方法出现在同一个道参考:

首先,我们将为所有常用方法创建一个接口:

我们将创建一个实现该接口的抽象类:

之后,我们将制作一个 DAOFactory,使我能够在不同的 ORM 之间顺利切换:

接下来,我们将为 hibernate 或任何其他可插入的 ORM 创建一个 DAOFactory:

为了给每个 DAO 增加专业化,我们将为每个 DAO 创建一个接口,该接口将扩展GenericDAOINT为包含每个 DAO 中用于 ServicesDAO 的通用方法,我们将执行以下操作:

最后,我们将为特定于 Hibernate 的 ServicesDAO 创建一个具体的类,如下所示:

我认为这些模式有助于在 ORM 之间轻松灵活地切换过程,但我告诉你的另一面是我想为每个 DAO 在相同的引用上调用所有方法(Common + Specialized),我尝试了以下客户端代码:

但我得到以下异常:

我想知道如何像以前的客户端代码一样在同一个引用上调用所有方法(Common + Specialized)。

0 投票
2 回答
2699 浏览

java - getCurrentSession() 与 openSession()

我正在尝试使用 generic-dao ( http://code.google.com/p/hibernate-generic-dao/ )。然而,在我的 HibernateBaseDAO 中,getSession() 方法被实现为 sessionFactory.getCurrentSession()。这会导致任何实体更新出错

但是,当我使用 openSession() 代替 getCurrentSession() 时,它可以工作。我没有在 pom.xml 中使用 spring 作为依赖项。我一直在阅读 openSession() 和 getCurrentSession(),但仍然无法理解为什么会这样?

0 投票
1 回答
706 浏览

spring - Spring Transactions 和通用 DAO 和服务的最佳实践

我使用 Spring 和 JPA (EclispeLink) 开发 Java EE 应用程序。我们开发了一个用户友好的界面来管理数据库表。随着我现在对 Spring 和 Transactions 有了更多的了解,我决定重构我的代码以添加更好的事务管理。问题是如何最好地处理通用 DAO、通用服务和 Spring 事务?

我们目前的解决方案是:

  • 处理所有常见数据库操作(查找、创建、更新、删除...)的通用 BasicDAO
  • 一个 DaoFactory,其中包含所有实体类型的 BasicDao 实现映射(只需要基本的数据库操作),并获取 spring 注入的 entitymanager 以将其传递给 daos
  • 提供通用服务的通用 BasicService(实际上直接链接到 dao 方法)
  • 一个 ServiceFactory,其中包含所有实体类型的 BasicService 实现映射,它获取 daoFactory 注入并将其传递给服务。它有一个方法“getService(Class T)”来为控制器提供正确的服务。
  • 对应于正确实体类型的控制器将其请求委托给通用控制器,该控制器使用反射处理请求参数并从服务工厂的映射中检索正确的服务以调用更新/创建/删除方法。

问题是,当我在通用服务上添加 @Transactionnal 注释并且我的 serviceFactory 在其映射中创建类型化服务时,这些服务似乎没有正在运行的活动事务。

1)由于通用性和只有spring管理的服务可以进行事务,这是否正常?

2)解决我的问题的最佳解决方案是什么:

  • 创建仅实现通用服务的托管类型服务并将它们直接注入我的 serviceFactory?
  • 去掉这些基础服务的服务层?(但也许我的 dao 通用层上的事务也会遇到同样的问题......)
  • 其他建议?

我在网上阅读了一些与这些观点相关的问题,但找不到像这里一样具有通用性的例子,所以我希望有人能给我建议......提前致谢!

0 投票
4 回答
2046 浏览

spring - 服务道模式的最佳实践是什么?

让我们考虑一个简单的用户插入操作。我的 Spring 相关课程是UserController, UserService, UserServiceImpl, UserDAO, UserDAOImpl.

在控制器端我调用userService.insert(new User())并在userService.insert()方法中调用userDAO.insert(user)。我认为这种模式存在方法重复。

有没有办法避免方法重复?可能是我的编码有问题。我等待你的回复,经验...

预先感谢...

0 投票
2 回答
915 浏览

java - 在 REST 调用 TOMCAT 中访问 DAO

使用 REST 调用时,我想通过我的 dao 访问数据。我的 dao 与 webapp 配合得很好。但是当我使用我创建的 web 服务时,我有一个空指针异常。

这是我的代码:

和错误堆栈:

空指针在那一行:

有什么办法解决这个问题吗?

谢谢

0 投票
2 回答
437 浏览

java - 使用通用 DAO 时出现 NoSuchMethodError

我正在尝试在项目中使用 GenericDAO:

子类 NoteDAO 扩展了 GenericDao,无需重写保存/删除方法。但是当我尝试使用它们时,我得到: java.lang.NoSuchMethodError: com.example.dao.NoteDAO.save(Lcom/example/model/Note;)V

这是我的 NoteDAO,它是空的:

为什么它不起作用?

0 投票
0 回答
487 浏览

java - Google genericdao 框架使用 Maven、Spring 和 Hibernate 执行不必要的选择

我正在使用 Hibernate 4.2.11 Final、Spring 3.2.4 和 Google Genericdao 1.2.0:

我的 SpringConfig.xml 是:

我有两张表:原因和评论。

原因表有 3 列:

  1. ID - PK 是否使用序列填充。
  2. 代码 - 对其具有唯一约束,并且是一个 varchar 字段。
  3. 说明 - 带文本的 varchar

评论表有 4 列:

  1. ID - PK 是否使用序列填充。
  2. ReasonCode - 有一个带有原因表的 FK。
  3. Order - Integer - 具有唯一约束和原因代码。
  4. 注释 - 带文本的 varchar

我正在为 Hibernate 和 Spring 使用注释。

我的原因域对象有

我的评论域对象具有:

我还在创建一个业务服务层并为其创建测试脚本。业务服务层有两种方法:

它们被实现为:

我的 JUNIT 测试是:

我遇到了一个问题,hibernate 忽略了由“addFetch”指定的内部连接,并单独检索所有原因。我有点解决了它,但不明白为什么它会这样工作。

有两种解决方案:

  1. 我更改了测试脚本的顺序。因此,我不是先检索 AllReasons,而是先检索 AllComments,然后再检索 allReasons。在这种情况下,内部联接得到尊重,并且不会单独检索原因。
  2. 我在 Comments 业务方法上将事务传播从 REQUIRED 更改为 REQUIRES_NEW。在这种情况下,内部联接得到尊重,并且不会单独检索原因。

显然问题与共享事务和检索顺序有关,但我不知道为什么。有人对我有一些见解吗?

非常感谢。

0 投票
5 回答
15199 浏览

java - Spring MVC:通用 DAO 和服务类

我正在用 Spring MVC 编写网络。我使用通用 DAO 编写了所有 DAO。现在我想重写我的服务类。我该如何写“通用服务”?

有我的 DAO:

和服务:

编译器(和 Eclipse)看不到findByNamefindByCode方法。我明白为什么。但是我该如何重写呢?

0 投票
1 回答
1030 浏览

java - Generic Dao 的设计模式,Spring 中的服务层,不使用 Hibernate

我访问了太多站点,并且还对 stackoverflow 提出了问题以供参考,但我无法在下面找到确切的答案。

我想设计一个Generic DAO Pattern不使用的架构hibernate

目前我在开发GenericSpringDAOImpl<DomainObject>java文件时遇到了麻烦。如何在没有或我说使用of 的情况下制作通用getList()方法(返回DomainObject对象)?hibernatejdbctemplatespring

我的代码如下:

通用DAO.java

GenericSpringDAOImpl.java

这里的域对象是任何对象,如学生、学校、教师等。