问题标签 [hibernate-generic-dao]

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 投票
2 回答
570 浏览

java - 如何在 Tapestry 5 中使用通用编辑器访问数据库?

我有一个 Tapestry 5 项目,其中包含以下内容:

  • 实体包中的抽象实体,由所有其他具体实体继承

    /li>
  • 继承 AbstractEntity 的几个具体实体(我将省略它们的大部分实体,因为我认为它与问题完全无关,它们是简单的实体数据类)。一个这样的实体类的示例:

    /li>
  • 一个通用的 DAO 接口

    /li>
  • 通用 DAO 接口的实现,在服务包中的 AppModule 中使用 binder.bind 绑定到它

    /li>
  • 组件包中的通用编辑器 java 类

    /li>
  • GenericEditor java 类的关联 .tml 文件

    /li>
  • 此外,pages 包中有几个 java 类,以及它们相关的 .tml 文件,这些文件最初是在没有使用 genericDAO 的情况下制作的,但是使用了具体的 DAO,所以它们看起来像这样(其中一个示例):

    /li>
  • 以及相关的 .tml 文件:

    /li>

上面使用具体 DAO 的代码正常工作,用于在数据库中输入新行的表单按预期显示在页面上,以及包含数据库表中的行的网格。

因此,基本思想是将 GenericEditor 与 genericDAO 一起使用,以减少必要的代码量并操作任何数据库表,使用 BeanEditForm 在表中输入新行,并使用 Grid 显示表中的所有行和删除或编辑它们。理论上,这应该适用于任何继承 AbstractEntity 类的实体,因此不需要为每个实体制作单独的 DAO 接口/实现配对。

问题是,我似乎无法让它按预期工作,因为我不确定如何实际使用上面显示的 GenericEditor。我尝试了以下方法:

  • RoomPage.java 修改后:

    /li>
  • RoomPage.tml 修改后:

    /li>

但这显然不起作用,因为它产生的只是一个空指针异常以及这个错误:

Blockquote [ERROR] pages.RoomPage Render queue error in SetupRender[RoomPage:ge.grid]: 读取组件 RoomPage:ge.grid: org.apache.tapestry5.ioc.internal.util.TapestryException org.apache 的参数“源”失败.tapestry5.ioc.internal.util.TapestryException:读取组件 RoomPage 的参数“源”失败:ge.grid:org.apache.tapestry5.ioc.internal.util.TapestryException [at classpath:com/mycompany/myproject/components/ GenericEditor.tml,第 5 行]

然后我尝试完全删除网格元素,并仅使用 BeanEditForm 运行 GenericEditor。这导致页面实际加载,但不是在页面上显示预期的表单,而是在表单末尾显示房间实体的字段和创建/更新按钮,出现的只是创建/更新按钮,没有任何字段,就好像 BeanEditForm 是在没有任何属性的对象上创建的。按创建/更新按钮会创建另一个空指针异常。

出于调试目的,我已将 GenericEditor.java 更改为以非泛型方式工作,方法是在其中创建泛型类型 T 的另一个属性,然后将其初始化为 Room 类型的新对象,强制转换为 (T),然后然后将属性类声明为与房间属性相同的类型,如下所示

运行具有这些更改的应用程序(仍然禁用网格并且仅启用 beaneditform),页面现在可以正确呈现所有输入字段。这使我得出结论,问题在于 GenericEditor 没有通过泛型接收正确的类型,但我不知道我的逻辑是否正确,即使正确,如何解决这个问题。问题的另一个可能来源可能是 PropertyConduit,我不确定它是如何工作的,以及我是否正确使用它,所以我不排除问题也源于那里。无论哪种方式,我的主要猜测是我以某种方式滥用了 GenericEditor,所以正如这个问题的标题所说,我应该如何使用 GenericEditor 才能正确访问数据库?

我已经在 stackoverflow 中搜索了与我自己类似的问题,但我找不到任何类似的东西,无论是在这里还是其他地方。我希望这里的某个人能够帮助我确定问题所在并帮助我解决它,因为我真的不知道如何自己解决。提前致谢。

更新: 我已经做了一些进一步的调试,尝试检查什么类型的类被转发到 GenericEditor 的 myclass。我修改了 GenericEditor.java 的以下位:

遵循:

这导致了以下输出:

管道1.toString():PropertyConduit[c​​om.mycompany.myproject.components.GenericEditor bean]

管道1.getPropertyType().toString():com.mycompany.myproject.entities.AbstractEntity 类

管道1.getPropertyType().getName():com.mycompany.myproject.entities.AbstractEntity

myclass.getName(): com.mycompany.myproject.entities.AbstractEntity

我相信这几乎意味着转发给 GenericEditor 的类型 T 是 AbstractEntity,而不是预期的 Room。如果我的假设是正确的,那么我正在滥用 GenericEditor,因为我没有通过泛型将正确的类转发给它,那么我应该如何将正确的类转发给它呢?还是我的假设是错误的,这里还有其他问题?

0 投票
1 回答
528 浏览

java - 管理休眠会话的策略

我使用 Hibernate 开发了一个 Java Web 应用程序。这是一些代码:

休眠.cfg.xml

BaseDAO.class

}

我为插入、更新、删除、查找编写了一个通用类

您可以看到,我不会在每种方法之后关闭会话。此代码适用于插入、更新和查找。但是当我想删除一个对象时:

这是抛出异常,因为我为此函数使用了两个会话。然后尝试在每个方法中关闭会话:

现在我可以删除对象,但我不能使用延迟加载,因为每个事务的会话都已关闭。

那么,我如何管理会话来克服这些情况!

0 投票
0 回答
117 浏览

java - DAO设计与实现实践

比如我有很多表,诸如此类people car house,我想知道一般DAO设计的一个好的做法。

在这种情况下,peoplecarshousescarhouse拥有它自己的 id,也许是一个 auto_increment int 值。他们还有一个外键userId,即user.

第一步,我设计了一个GenericDao为所有表提供基本 CRUD 功能。

接着?

我需要找到用户 A 的所有汽车,所以我需要一个CarDaowith 函数findAllCarsForUser(int userid),它可能还有findCarsByName(String name)等等findCarsByNameForUser(String name, int userid)。对于House,同样HouseDao需要。如果人们有其他类型的东西,每个人都应该有一个ObjectXXXDao.

但是对于上层,应该XXXDao暴露给他们吗?

我认为不应该,所以每个DAO都有一个包装Service类,比如CarService HouseService等等。但是对于这些服务类中的函数,可能只有语句return XXXDao.findCarsByNameForUser()。没有或很少向服务类添加任何附加功能。

或者该层应该添加什么功能XXXservice

如果需要加入CarandHouse表,可能需要CarHouseDaoand CarHouseService

我想知道,这对于一个普通的 DAO 来说是不是一个好的设计?如果没有,有什么好的建议或例子吗?

0 投票
1 回答
241 浏览

java - 使用 Hibernate 从 DB 检索数据时出现映射错误

我有以下实体类:

我也有以下 hibernate.cfg.xml :

在我的主要工作中,我正在执行以下操作:

dao 类在哪里:

当我运行它时,我收到了错误:

如果我将 findAll 方法更改为:

那么我只是得到一个空列表。

有人可以帮忙吗?

也许会话以某种方式损坏。

谢谢。

0 投票
1 回答
314 浏览

spring - 如何在 Spring MVC 中的不同类中创建动态 bean

我需要在运行时使用动态 bean 工厂为不同条件创建具有不同类的动态 bean。它用于通用 DAO 实现。如何使用 Java 配置来实现它?

MVC 初始化器类

使用原型 bean 配置

0 投票
2 回答
6265 浏览

java - 通用 DAO、Spring、Hibernate

我想了解如何在我的数据库上实现添加、编辑、删除和搜索等通用方法,我已经建立了连接(休眠)并且工作正常

我有这个方法,有效

类:通用DAO

并在主要

我也有其他方法我不知道如何使用它们

类:通用DAO

谢谢

0 投票
2 回答
679 浏览

java - NullPointerException 使用 Spring 使 Generic Dao 休眠

我有一个业务逻辑类,它尝试使用从通用 Dao 保存的 dao 方法,这是来自 bl 的代码。

调试我发现用户对象正确填充了数据,而 DaoImpl 就是这个

这是我使用的通用类。

有人可以帮助理解为什么我在保存()中使用对象用户时收到此错误。

谢谢。

0 投票
1 回答
179 浏览

java - 使用 GenericDAO 插入第二个数据源时出错

使用 GenericDAO 插入第二个数据源时出错

我正在尝试在persistence.xml 中插入第二个碱基。我已经在 jboss 中配置了数据源并对其进行了测试。在 xml 中插入第二个持久性单元并尝试引发 jboss 时,会发生以下错误。我尝试在每个 DAO 类中设置@PersistenceContext (unitName = "unit-name") 和@PersistenceUnit,但无济于事。我尝试遵循一些教程,但我不明白如何逐步适应我的上下文,也不知道是否是这种情况。

我想知道如何为我的案例进行配置,我认为最大的区别是我有一个来自 GenericDAO 的 EntityManager,这让我很难理解。如果我必须在 DAO 或实体中注释其他内容,如果我必须创建另一个抽象类怎么办?

错误:

未指定持久单元名称,部署应用程序“intranet.war”的部署中有持久驱动器定义2。您可以将应用程序的部署更改为只有一个持久性单元定义,或者为持久性单元的每个引用指定 unitName。

持久性.xml

GenericDAO 类

应该使用基础内部的类 itemDAO。在其中我尝试使用@PersistenceContext (unitName = "intrasis")

另一个使用另一家银行和 tbm 的类我为另一家银行尝试了 PersistenceContext。

0 投票
0 回答
135 浏览

java - 如何为 Junit 测试模拟 executeNamedQuery(query, params)

@Repository 公共类 DAOImpl 扩展 GenericDaoImpl 实现 SomeDAO {

我如何模拟 executeNamedQuery(query, params) 调用并返回一些东西 Ex:Mockito.when(entityManagerMock.merge(Mockito.any())).thenReturn(someObject);

0 投票
1 回答
63 浏览

java - 使用 group by / unqiue 进行通用 DAO 搜索

我正在使用 hibernate-generic-dao 进行搜索功能。因为如果它们在列字段上具有相同的值,我只需要显示其中一条记录。但我不确定如何通过搜索/过滤功能来实现这一点。